以图明志

JavaScript

JavaScript要理解闭包先了解词法作用域

一系列JavaScript基础概念是连通的
要理解的话,其实我们可以对比传统面向对象的(如JAVA、C#)中的变量的作用域,我们知道C#中的变量作用域是块级的,即这个变量只能活动在定义他的一个直接外界内,如if子句内,for子句内定义的变量外界是无法读取的。而js中呢,变量却不是这样的,在同一个函数内定义的变量其它的成员是可以访问的。

JavaScript

js词法作用域、调用对象与闭包

JavaScript词法作用域与调用对象
Javascript 中的函数属于词法作用域,也就是说函数在它被定义时的作用域中运行而不是在被执行时的作用域内运行。这是犀牛书上的说法。但"定义时"和"执行(被调用)时"这两个东西有些人搞不清楚。简单来说,一个函数A在"定义时"就是 function A(){} 这个语句执行的时候就是定义这个函数的时候,而A被调用的时候是 A() 这个语句执行的时候。

JavaScript

如何在数据访问层上提高js的执行效率

标识符解析、作用域链、运行期上下文、原型链、闭包
本文讲到的是如何从数据访问层面上提高JS 代码的执行效率。总的来讲有以下几条原则:函数中读写局部变量总是最快的,而全局变量的读取则是最慢的;尽可能地少用with 语句,因为它会增加with 语句以外的数据的访问代价;闭包尽管强大,但不可滥用,否则会影响到执行速度以及内存;嵌套的对象成员会明显影响性能,尽量少用;

JavaScript

深入浅出JavaScript变量作用域

受益匪浅的一篇精品文章
在学习JavaScript的变量作用域之前,我们应当明确几点:1. JavaScript的变量作用域是基于其特有的作用域链的。2. JavaScript没有块级作用域。3. 函数中声明的变量在整个函数中都有定义。JavaScript首先在inner函数中查找是否定义了变量rain,如果定义了则使用inner函数中的rain变量。

PHP服务器脚本

PHP作用域限定符::的几个程序例子

帮助加深理解双冒号
双冒号::被认为是作用域限定操作符,用来指定类中不同的作用域级别。::左边表示的是作用域,右边表示的是访问的成员。系统定义了两个作用域,self和parent。self表示当前类的作用域,在类之外的代码是不能使用这个操作符的。parent这个作用域很简单,就是派生类用来调用基类的成员时候使用。

PHP服务器脚本

PHP作用域限定符双冒号::的用法

用双冒号写几个程序
双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态、const和类中重写的属性与方法。在类定义外使用的话,使用类名调用。在PHP 5.3.0,可以使用变量代替类名。

PHP服务器脚本

[专题] PHP内核探索:变量作用域

变量的作用域是变量的一个作用范围
变量的作用域是变量的一个作用范围,在这个范围内变量为可见的,即可以访问该变量的代码区域, 相反,如果不在这个范围内,变量是不可见的,无法被调用。 (全局变量可以将作用范围看作为整个程序) 如下面的例子:(会输出什么样的结果呢?)由此可见,变量的作用域是一个很基础的概念,在变量的实现中比较重要。

PHP服务器脚本

[专题] PHP内核探索:变量的生命周期

变量的定义方式以及作用域
通过前面章节的描述,我们已经知道了PHP中变量的存储方式--所有的变量都保存在zval结构中。 下面介绍一下PHP内核如何实现变量的定义方式以及作用域。在ZE进行词法和语法的分析之后,生成具体的opcode,这些opcode最终被execute函数(Zend/zend_vm_execute.h:46)解释执行。

JavaScript

[专题] JavaScript闭包其二:闭包的实现

ECMAScript只使用静态(词法)作用域
讨论完理论部分,接下来让我们来介绍下ECMAScript中闭包究竟是如何实现的。这里还是有必要再次强调下:ECMAScript只使用静态(词法)作用域(而诸如Perl这样的语言,既可以使用静态作用域也可以使用动态作用域进行变量声明)。

JavaScript

[专题] JavaScript作用域链其三:作用域链特征

作用域链相关的一些重要特征
让我们看看与作用域链和函数[[scope]]属性相关的一些重要特征。在ECMAScript中,闭包与函数的[[scope]]直接相关,正如我们提到的那样,[[scope]]在函数创建时被存储,与函数共存亡。实际上,闭包是函数代码和其[[scope]]的结合。因此,作为其对象之一,[[Scope]]包括在函数内创建的词法作用域(父变量对象)。

JavaScript

[专题] JavaScript作用域链其二:函数的生命周期

分为创建和激活阶段
函数的的生命周期分为创建和激活阶段(调用时),让我们详细研究它。众所周知,在进入上下文时函数声明放到变量/活动(VO/AO)对象中。让我们看看在全局上下文中的变量和函数声明(这里变量对象是全局对象自身,我们还记得,是吧?)

JavaScript

[专题] JavaScript作用域链其一:作用域链定义

内部上下文所有变量对象的列表
一个执行上下文 的数据(变量、函数声明和函数的形参)作为属性存储在变量对象中。变量对象在每次进入上下文时创建,并填入初始值,值的更新出现在代码执行阶段。这一章专门讨论与执行上下文直接相关的更多细节,这次我们将提及一个议题——作用域链。如果要简要的描述并展示其重点,那么作用域链大多数与内部函数相关。

JavaScript

[专题] 执行上下文其二:作用域链 Scope Chains

作用域链的原理和原型链很类似
作用域链的原理和原型链很类似,如果这个变量在自己的作用域中没有,那么它会寻找父级的,直到最顶层。标示符[Identifiers]可以理解为变量名称、函数声明和普通参数。例如,当一个函数在自身函数体内需要引用一个变量,但是这个变量并没有在函数内部声明(或者也不是某个参数名),那么这个变量就可以称为自由变量[free variable]。

JavaScript

[专题] JavaScript探秘:SpiderMonkey的怪癖

命名函数的标识符只在局部作用域中有效
大家都知道,命名函数表达式的标识符只在函数的局部作用域中有效。但包含这个标识符的局部作用域又是什么样子的吗?其实非常简单。在命名函数表达式被求值时,会创建一个特殊的对象,该对象的唯一目的就是保存一个属性,而这个属性的名字对应着函数标识符,属性的值对应着那个函数。这个对象会被注入到当前作用域链的前端。

JavaScript

[专题] JavaScript探秘:eval()是“魔鬼”

eval()可以干扰作用域链
如果你现在的代码中使用了eval(),记住该咒语“eval()是魔鬼”。此方法接受任意的字符串,并当作JavaScript代码来处理。当有问题的代码是事先知道的(不是运行时确定的),没有理由使用eval()。如果代码是在运行时动态生成,有一个更好的方式不使用eval而达到同样的目标。例如,用方括号表示法来访问动态属性会更好更简单。

JavaScript

JavaScript scope作用域与this关键字

JavaScript也具有OO的特性
作为一个程序员, 你可能早已经习惯于面向对象语言中指代当前对象的引用(或者指针), 如的c 中的this或者 python 中的self,当然具有OO属性( javascript 其实更多的是一种所谓的函数式语言)的 javascript 同样, 它也具有引用当前属性的对象的指针(或者引用), 也就是this关键字。
1 / 2 首页 < Prev 1 2 Next > 尾页 页码: