原文:Scope and this in JavaScript今天我想简单讨论下关于JavaScript的作用域和this变量。“作用域”的概念就是说。我们的代码能够从哪里去訪问某些函数或者变量。也就是它们所存在的上下文。或者说就是它们被运行的地方。 你可能已经见过有的人写相似这样的代码:function someFunc() {var _this = this;something.on("click", function() {console.log(_this);}); }; 但是你却搞不懂当中“var _this=this;”这一句究竟是要干嘛...
目录引言 1、执行环境 2、作用域与作用域链引言 作用域与作用域链是JS应用中无时无刻不在影响程序运行的关键属性,但是由于它的不可见性,或者说它存在的过于普遍,简直就像空气一样。所以对它的谈及,都很简单,而理解起来也不复杂。 但是由于它的重要性,对它做一个篇幅的说明,也是一件理所应当的事情。而且它其实也并没有理解上那么简单。 本文对作用域及作用域链的说明,可能并不全面。笔者尽量以自身开发...
JavaScript变量、作用域 / 2-1 查漏补缺 查缺补漏: ? ? 变量: 可修改的保存数据的容器。 ? 变量的命名: $ _ 字母 数字,只有数字不能开头,关键字保留字页不能开头。 jQuery:$.each(); underscore:_.each();//这也是一个js的函数库。 $ == jQuery; 区分大小写。 关键字:if,for等。 保留字:class等。 命名要有意义,单词,可以用下划线或驼峰法连接。 i/j/k用于计数循环。 ? 变量的声明: JavaScript变量、作用域 / 3-1...
1、对象 一切引用类型都是对象,函数function其实也是对象。对象多用字面量表示法创建。所有对象都是键值对的集合,这个值当然也可以是对象/函数,可以有很多层级,这个跟json有点像,在现代化js里,json和js对象可以无缝转换。 2、函数 函数是一种特殊的对象,函数名只是函数的一个指针,可以被当做变量传递,给编程带来极大的灵活性,比如回调。 3、构造函数 构造函数也是函数,约定首字母大写,但是不是必须的。 构造函数用于构...
变量的声明和赋值、预编译、作用域链和闭包 1.变量的声明和赋值 var x = 1 先声明,后赋值。 aa = 1 不会报错。和预编译那有关。其实是window.aa = 1。这个不参与预编译。预编译只找有var声明的。 例如: console.log(xxx) -----------undefined var xxx = 5 console.log(xxx) ------------ 5 console.log(xxx) -----------报错 xxx = 5 ------------------------未参与预编译 console.log(xxx) ------------ 5 2.预...
JavaScript 作用域 在 JavaScript 中, 对象和函数同样也是变量。 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 JavaScript 函数作用域: 作用域在函数内修改。 JavaScript 局部作用域 变量在函数内声明,变量为局部作用域。 局部变量:只能在函数内部访问。<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>mtimeyu</title> </head> <body><p>局部变量在声明的函数外不可以访问。</p> <p id="demo"><...
一、js中的词法作用域和动态作用域 词法作用域也就是在词法阶段定义的作用域,也就是说词法作用域在代码书写时就已经确定了。 js中其实只有词法作用域,并没有动态作用域,this的执行机制让作用域表现的像动态作用域,this的绑定是在代码执行的时候确定的。 example1: 理解词法作用域 记住js中只有词法作用域没有真正的动态作用域,作用域是在代码书写时确定的var value = 1;function foo() {console.log(valu...
我有database.js文件可以连接到db并管理连接,我可以导出连接并在我的应用中重用它var mysql = require('mysql');pool = mysql.createPool({host: cfg.mysql.host,user: cfg.mysql.user,password: cfg.mysql.pass,database: cfg.mysql.db,port: cfg.mysql.port});function handleDisconnect() {pool.getConnection(function(err, cnt) {module.exports.connection = cnt;});pool.on('error', function (err) {console.log(err);});}...
1 在JavaScript中的变量分别区分为两种: 一种为基本类型值,一种为应用类型值。 基本类型值指的是简单的数据段 引用类型值为可能由多个值组成的对象 引用类型的值是保存在内存中的对象,JavaScript不允许直接操作对象的内存空间,实际上操作对象的引用而不是实际对象。 var dada = new Object();undefineddada.name = "dada";"dada"console.log(dada.name);VM158:1 dadaundefined var da1 = "da1";undefinedda1.a...
JS的变量用来存储基本值类型数据与引用类型数据 JS的基本值类型有:Undefined、Null、Boolean、Number、String五种;他们存放于栈内存中,可以直接操作他们的值。 JS引用类型的值是以对象形式存放在堆内存中,JS不允许直接访问堆内存,所以对对象的操作,实际上是在操作对象的引用。 JS的动态属性 引用类型可以为其动态的添加属性和方法、下面代码演示了如何为一个名为person的对象添加name属性:var person=new Object(); person....
对于一本编程语言来讲,个人认为,最基本的就是存储,在存储,读取,计算值的时候是按照一定的规则来操作,这套规则呢就叫做作用域。 值保存,读取,的时候需要一个范围,如果以按照函数为单位的话就做函数作用域,按照模块的话就叫做模块作用域。作用域是可以相互嵌套的。 js作为一本编译语言,需要两个过程,一个是编译另一个呢就是运行。而编译大致分为两个部分,1,词法与语法分析(编译) 2,代码生成的过程。 编译时在打开浏览...
基本类型和引用类型 JS不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,在操作对象时,实际上是操作对象的引用而不是实际的对象 传递参数 访问变量是有按值访问和按引用访问两种形式,而参数只能按值传递。 检测类型typeof操作符是确定 string number boolean undefined的最佳工具 如果是 对象 或 null 时,都会返回“object” instanceof 检测对象变量可访问的范围什么全局作用域函数之外的执行环境。全局变量在...
1)函数体中的在函数体外不能用 2)如果两个函数使用相同的变量名,只要在函数内部,就不冲突 3)函数成员可以访问函数内部的成员,反之不行 4)假设,内部函数变量和外部函数的变量重名,由内向外查找。 提升变量的作用域1 function fun() { 2 3 var x = "x" + y; 4 console.log(x); 5 var y = y; 6 }结果:undefined 说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值1 function fun() { 2 3 var y; 4...
JS 作用域及作用域链 ?一、作用域在 Javascript 中,作用域分为 全局作用域 和 函数作用域全局作用域:代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。 函数作用域:在固定的代码片段才能被访问例子:作用域有上下级关系,上下级关系的确定就看函数是在哪个作用域下创建的。如上,fn作用域下创建了bar函数,那么“fn作用域”就是“bar作用域”的上级。作用域最大的用处就是隔离变量,不同作用域下同...
1.函数作用域 1.1 函数作用域的含义 属于这个函数的全部变量都可以在这个函数的范围内使用及复用(包括嵌套的作用域)。题外提一点:这充分利用了JS变量能够根据需要改变值类型的“动态”特性。 2.函数存在的意义——隐藏内部实现 2.1 隐藏内部实现的意义 遵循软件设计中“最小暴露”原则,保持变量原有的私有特性规避同名标识符之间的冲突,避免其导致的值错误覆盖等问题 2.2 隐藏内部实现的常用方法 全局命名空间: 在导入第三方...