Js笔记-第11课
Js笔记-第11课
// 第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]();
}

浙公网安备 33010602011771号