// 第11课

 
 

 
 

作用域精解

 
 

运行期上下文,当函数执行时,会创建一个成为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行期上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行期

上下文,当函数执行完毕,他所产生的执行上下文被销毁

 
 

 
 

查找变量:从作用域的顶端依次向下查找

 
 

作用域

 
 

[[scope]]]每个javascript函数都是一个对象,对象中有些属性我们可以访问,但是有些不可以,这些属性仅供javascript

引擎存取,[[scope]]就是其中一个

[[scope]]指的就是我们所说的作用域,其中存储了运行期上下文的集合

 
 

作用域链;[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链

 
 

 
 

 
 

javascript执行环境(执行期上下文)

当js控制器(control)进入可执行代码时,控制器会进入一个执行环境,活动的多个执行环境构成执行环境栈,最上面的是正在运行的执行环境,当控制器进入一个新的执行环境时,新的执行环境被放到栈最顶端。

执行环境包含以下三个组件:

 
 

组件 作用目的

词法环境 执行环境内的代码创建的标识符引用的一个词法环境对象

变量环境 执行环境内的代码通过变量表达式和函数表达式创建的绑定的一个词法环境对象。

this绑定 指定该执行环境内的this关键字所关联的值。

 
 

 
 

 
 

立即执行函数

针对初始化功能的函数

只有表达式才能被执行符号执行,(将函数变为表达式,函数执行完立即释放,达到立即执行函数的结果)

被执行符号执行的表达式, 名字被自动忽略(放弃)。

 
 

 
 

不是最初语法,实践中,利用了()的特性

 
 

(function(){}()) 标准写法

(function(){})()

+ - ! function test(){} ()

var a = function( ){} ()

 
 

试题

 
 

function text(a,b,c,d){

console.log(a + b + c + d)

}(1,2,3,4);

 
 

不报错 不执行

 
 

 
 

系统执行结果

function text(a,b,c,d){

console.log(a + b + c + d)

}

 
 

上下分开

 
 

(1,2,3,4);

 

 

/////////////////////////练习题

 

// function text(){

// var arr = [];

// for (var i = 0; i < 10; i++){

// arr[i] = function(){

// document.write(i + " ")

// }

// } return arr

// }

 

// var myarr = text() ;

// for (var j = 0; j < 10; j ++){

// myarr[j]();

// }

 

// 形成闭包,输出10个10

// <!--

// function text(){

// var arr = [];

// for (var i = 0; i < 10; i++){

// arr[i] = function(){

// var m = i;

// document.write(m + " ");

// }

// } return arr;

// }

 

// var myarr = text() ;

// for (var j = 0; j < 10; j ++){

// myarr[j]();

// }

 

// 不能解决问题,函数赋值给arr时,函数不执行,想解决闭包必须让函数立即执行; -->

function text(){

var arr = [];

for (var i = 0; i < 10; i++){

(function(j) {

arr[j] = function(){

document.write(j + " ");

}

 

}(i))

} return arr

}

 

var myarr = text() ;

for (var j = 0; j < 10; j ++){

myarr[j]();

}

最新文章

  1. git配置
  2. Spring操作指南-AOP基本示例(基于XML)
  3. 关于 jquery和js获取宽度时只能取整数,取不到小数点
  4. 插入排序-java
  5. jsp统测
  6. sigaction 函数
  7. jqure全选/取消
  8. 259. 3Sum Smaller
  9. Eclipse使用技巧及个性化设计
  10. 获取动态SQL查询语句返回值(sp_executesql)
  11. Win32消息机制
  12. c语言else匹配问题
  13. How use Instruments and display the console in Command Lines applications
  14. spring_boot打jar包及打包错误的解决方法
  15. Android性能优化之Listview(ViewHolder重用机制)
  16. 面试时怎样回答:你对原生ajax的理解
  17. 使用wget命令下载网络资源
  18. Java编程的逻辑 (95) - Java 8的日期和时间API
  19. 373. Find K Pairs with Smallest Sums 找出求和和最小的k组数
  20. Delphi下EasyGrid使用体会

热门文章

  1. 51nod1107(逆序对数&amp;归并排序)
  2. 洛谷P3608 [USACO17JAN]Balanced Photo平衡的照片
  3. 剑指Offer的学习笔记(C#篇)-- 矩形覆盖
  4. UVA - 1330 City Game
  5. HTML5元素拖放设置总结
  6. NET Core实现OAuth2.0的ResourceOwnerPassword和ClientCredentials模式
  7. python HTTP 状态码
  8. SPI接口的ETH芯片(ENC28J60/W5500)
  9. RDL 数值列排序
  10. thymeleaf中th:attr用法以及相关的thymeleaf基本表达式