JS
文章平均质量分 75
leng_nuan
人生处处有惊喜,那些或好的,或坏的都会出现在生命里,做最暖的自己
展开
-
一、RHS和LHS查找 异常
作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是对变量进行赋值,农民就会使用LHS查询;如果目的是获取变量的值,就会使用RHS查询。JavaScript引擎首先会在代码执行前对其进行编译,在这个过程中,像 var a =2这一点声明会被解析成两个独立的步骤:首先,var a 在其中作用域中声明新变量。这是在代码执行前进行。接下来,a =2会查询(LHS查询)...原创 2018-08-31 21:50:19 · 321 阅读 · 0 评论 -
三、函数作用域+隐藏内部实现
作用域包含了一系列的“气泡”,每一个都可以作为容器,其中包含了标识符(变量、函数)的定义。1.函数中的作用域函数作用域的含义:属于这个函数的全部变量都可以在整个函数范围内使用及复用(事实上在嵌套的作用域中也可以使用)。这种方案能充分利用JS变量可以根据需要改变值类型的“动态特性”。function(){ var b=2; //一些代码 function bar(...原创 2018-09-04 15:39:15 · 385 阅读 · 0 评论 -
3.3.2立即执行函数表达式
立即执行函数表达式IIFE(Immediately Invoked Function Expression):立即执行函数表达式。 函数名对IIFE不是必须的,最常见的是使用一个匿名函数表达式。var a=2;(function foo(){ var a=3; console.log(a);//3})();console.log(a);//2由于函数被包含在一对...原创 2018-09-04 16:25:47 · 131 阅读 · 0 评论 -
三、3.4块作用域
尽管函数作用域是最常见的作用域单元,除JS外的很多编程语言都支持块作用域。 块作用域是一个用来对之前的最小授权原则进行扩展的工具,将代码从在函数中隐藏信息扩展为在块中隐藏信息。你可能连一行带有块作用域风格的代码都没有写过但是你肯定熟悉下面的JS代码:for( var i=0;i<10;i++){ console.log(i);}在for循环的头部定义了变量 i,通常是...原创 2018-09-04 20:47:17 · 161 阅读 · 0 评论 -
JS词法作用域和动态作用域区别
动态作用域不关心函数和作用域是如何声明以及在何处声明的,只关心它们从何处调用。 作用域链式基于调用栈的,而不是代码中的作用域嵌套。需要明确的是,JavaScript并不具有动态作用域,。它只有词法作用域,简单明了。但是this机制某种程度上很像动态作用域。function foo(){ console.log(a);//2}function bar(){ var a=...原创 2018-09-11 15:16:34 · 1367 阅读 · 1 评论 -
四、提升
目前以及熟悉了作用域的概念,以及根据声明的位置和方式将变量分配给作用域的相关原理。 函数作用域和块作用域的行为一样,总结为:任何声明在某个作用域内的变量,都将附属于这个作用域。引擎在解释JS之前首先对其进行编译,编译阶段中的一部分工作就是找到所有声明,并用合适的作用域将它们关联起来。当你看到 var a=2;时,可能会认为这是一个声明,但JS实际上会将其看成两个声明:var a;...原创 2018-09-05 18:41:03 · 123 阅读 · 0 评论 -
二、JS词法作用域--查找--欺骗词法
作用域共有两种主要的工作模型。第一种是最为普遍的,被大多数编程语言所采用的词法作用域。 另一种叫作动态作用域,仍有一些编程语言在使用(比如Bash脚本、Perl中的一些模式等)。词法作用域意味着作用域是由书写代码是函数声明的位置来决定的。编译的词法分析阶段基本能够直到全部标识符在哪里以及是如何声明的,从而能够预测在执行工程中如何对它们进行查找。JavaScript中有两个机制可以“欺骗”...原创 2018-09-03 11:16:28 · 280 阅读 · 0 评论 -
五、闭包
当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。 函数在定义时的词法作用域以外是地方被调用,闭包使得函数可以继续访问定义时的词法作用域。function foo(){ var a=2; function bar(){ console.log(a);//2 } bar();}foo();基于词法作...原创 2018-09-09 19:51:36 · 148 阅读 · 0 评论