0
点赞
收藏
分享

微信扫一扫

js作用域

程序员阿狸 2022-03-10 阅读 74

作用域

作用域说明:一般理解指一个变量的作用范围。

一:优先级:

变量>声明普通函数 var a; function a(){} console.log(a)//打印a变量

二:作用域:

全局作用域

1.全局作用域在页面打开时被创建,页面关闭时被销毁

2.编写在script标签中的变量和函数,作用域为全局,在页面的任意位置都可以访问到

3.在全局作用域中有全局对象window,代表一个预览器窗口,由预览器窗口,由预览器创建,可以直接调用

4.全局作用域中声明的变量和函数会作为window对象的属性和方法保存

函数作用域

1.调用函数时,函数作用域被创建,函数执行完毕,函数作用域被摧毁

2.每调用一次函数就会创建一个新的函数作用域,他们之间相互独立的

3.在函数作用域中可以访问到全局作用域的变量了,在函数外无法访问到函数内的变量

4.在函数作用域中访问变量,函数时,会先在自身作用域中寻找,

若没有找到,则会到函数的上一级作用域中寻找,一直到全局作用域

三: 再说作用域:

执行期的上下文

--当函数代码执行的前期 会创建一个执行期上下文的内部对象AO(作用域) --这个内部的对象是预编译的时候创建出来的 因为当函数被调用的时候 会先进行预编译 --在全局代码执行的前期会创建一个执行期的上下文的对象GO

作用域链

--会保存到一个隐式的属性中去[[scope]]这个属性,是我们用户访问不到的 但是的的确确是存在的,让js引擎访问的 里面存储的就是作用域链(AO和GO)

函数执行完作用域链,进行销毁; 再执行,又重新连上

函数作用域 预编译

AO active object

在函数创建时,会创建临时对象AO,方法和变量都会存储到AO里面,

方法AO执行完后,就会被回收掉.

1.创建ao对象 AO{} AO active object 这个AO 2.找形参和变量声明 将变量和形参名 当做 AO对象的属性名 值为undefined 3.实参行参相统一 4.在函数体里面找函数声明 值赋予函数体

全局作用域 预编译

1.创建 GO对象 2.找变量声明 将变量名作为GO对象的属性名 值是undefined

四:来写,道题吧

说出打印的结果?

function fn(a, c) {

console. log(a)

var a=123

console. log( a )

console. log( c)

function a() {}

if (false) {

var d=678

}

console. log(d)

console. log(b)

var b=function(){}

console. log(b)

function c() {}

console. log(c)

}

fn(1, 2)

举报

相关推荐

0 条评论