02 2020 档案
摘要:模块是闭包应用中最强大的一个。 function CoolModule() { var something = 'cool'; var another = [1, 2, 3]; function doSomething() { console.log( something); } function
阅读全文
摘要:要说明闭包,for 循环是常见的例子 for (var i=1; i<=5; i++) { setTimeout(function timer() { console.log(i); }, 0) } 延迟函数的回调会在循环结束时才执行,执行循环的时候,变量的值已经变成 6 了,因此会每次输出一个 6
阅读全文
摘要:上一节的闭包是为了解释如何使用闭包而人为地在结构上进行修饰,在昨天的闭包基础上,我们可以更加灵活的使用闭包 function wait(message){ setTimeout(function timer(){ console.log(message) }, 1000) } wait('hello
阅读全文
摘要:当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行 function foo(){ var a = 2; function bar() { console.log(a); } return bar } var baz = foo(); baz(); // 2 —
阅读全文
摘要:我们直觉上会认为 JavaScript 代码在执行时是由上到下一行一行执行的。但实际这并不完全正确 a = 2; var a; console.log(a); 这里可能会认为是 undefined,因为 var a 声明在 a = 2 之后。实际输出了 2。 console.log(a); var
阅读全文
摘要:除 JavaScript 外的很多编程语言都支持块作用域,但是 JavaScript 开发者对此并不是那么熟悉,尽管之前的标准中已经隐式的涵盖了这块内容 for(var i=0; i<10; i++) { console.log(i); } 我们把 var 写在 for 里面,通常是想在 for 循
阅读全文
摘要:立即执行函数表达式(IIFE,Immediately Invoked Function Expression) (function foo(){ var a = 3; console.log(3); })() 这种 (funciton foo(){...})()。第一个 () 将函数变成表达式,第二
阅读全文
摘要:在任意代码片段外部添加包装函数,可以将内部的变量和函数定义“隐藏”起来,外部作用域无法访问包装函数内部的任何内容。 var a = 2; function foo() { var a = 3; console.log(a); // 3 } foo(); console.log(a); // 2 虽然
阅读全文
摘要:function foo(a){ var b = 2; // ... function bar(){ // ... } // ... var c = 3; } foo 的作用域气泡中包含了标识符 a、b、c 和 bar bar 拥有自己的作用域气泡 全局作用域也有自己的作用域气泡,它只包含了一个标识
阅读全文
摘要:如果词法作用域完全由写代码期间函数所声明的位置来定义,怎样才能在运行时来“修改”词法作用域呢?有些人喜欢特殊的办法来解决遇到的问题。我们规定词法作用域是代码写在哪里决定的,一旦决定了无法更改,因为一些问题,我们不得不更改作用域,尽管这是不被推荐的,那是什么办法,JavaScript 中有两种机制来实
阅读全文
摘要:作用域分为两种,一种是词法作用域,一种是动态作用域。事实上 JavaScrtip 并不具有动态作用域。它只有词法作用域。 如果非要从 JavaScript 中找到动态作用域,那么动态作用域是 this 的表亲。this 是 JavaScript 一个重要的机制 function foo() { co
阅读全文
摘要:作用域分为两种,一种是词法作用域,一种是动态作用域,我们先看第一种,词法作用域 词法作用域就是定义在词法阶段的作用域(编译器的第一个工作阶段叫做词法化,词法化的过程会对源代码中的字符进行检查)。换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的。因此词法分析器处理代码时会保持作用域
阅读全文
摘要:在变量还没有声明, LHS,RHS 两种查询的行为是不一样的 function foo(a){ console.log(a+b); b=a; } foo(2); 第一次对 b 进行 RHS 查询时是无法找打该变量对,如果 RHS 查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出 Refere
阅读全文
摘要:作用域是根据名称查找变量的一套规则。实际情况下,通常需要同时顾及几个作用域。来看两个例子 function foo(a){ console.log(a); //2 } foo(2); 把这段代码的处理过程想象成一段对话 引擎:我说作用域,我需要为 foo 进行 RHS 引用,你见过它吗? 作用域:别
阅读全文
摘要:对代码进行处理的三个角色 引擎:从头到尾负责整个 JavaScript 程序的编译和执行过程 编译器:负责语法分析及代码生成等 作用域:负责收集并维护所有变量的查询 var a = 2; 编译器首先会将这段程序分解成词法单元,然后将词法单元流解析成一个树结构。然后将树结构转换成可执行代码,也就是计算
阅读全文
摘要:JavaScript 是一门编译语言,它不是提前编译的,这是与传统的编译语言不同的地方。但是其编译步骤和传统的编译语言非常相似 编译:程序中的一段源代码在执行之前会经历三个步骤,统称为“编译” 1、分词/词法分析 将字符串 分解成 代码块(词法单元) var a = 2; 分解成 var、a、=、2
阅读全文
摘要:sudo killall mDNSResponder 安装应用的权限 sudo spctl --master-disable
阅读全文