js语言中的作用域

作用域一般来说ES5:function  var 跟作用域有关,当函数调用时有以下执行步骤:

1.先进行扫描(预编译)扫描的时候会把内部的所有var和function修饰的标识符加到一个对象中去==>AO

2.在运行脚本

函数再运行时如何产生应该作用域:

1.先把内部变量和形参声明了(变量不赋值,形参赋值实现数据)

2.然后把函数隐式的做提升,函数提升会把脚本一起做提升

3.按照函数体内部的代码逻辑(js的单线程执行任务)执行代码

4.函数被调用时 是在它声明的地方(作用域去执行代码)

经典例题:

<script>
function fun(n, o) {
				console.log(o)
				return {
					fun: function(m) {
						return fun(m, n);
					}
				};
			}
			var a = fun(0);//unde
			a.fun(1);//0
			a.fun(2);//0 
			a.fun(3);//0
			var b = fun(0).fun(1).fun(2).fun(3);//und 0 1 2 
			
			var c = fun(0).fun(1);//und 0 
			c.fun(2);//1
			c.fun(3);//1
</script>

分析:

如 fun(0).fun(1).fun(2).fun(3)

这种调用每一个调用完毕以后会在全局作用下去生成AO对象 但是实参取值是在局部作用域下取值 因此打印结果是unde 0 1 2

如 a.fun(1); a.fun(2);a.fun(3);

 a.fun(1)这个调用会在上一个AO对象中取实参 在全局GO对象生成AO作用域对象

a.fun(2);这个调用也会在上一个AO对象中取实参 在全局GO对象生成AO作用域对象

a.fun(3);这个调用也会在上一个AO对象中取实参 在全局GO对象生成AO作用域对象

var a = fun(0);//这种调用生成了一个AO对象

这种程序题 怎么做笔试题?

1.这个题主要考察我是否会js中作用域,在js中函数调用时会生成作用域对象来存储局部标识

2.函数调用时先去访问这个函数的引用 然后去它声明的作用的对象下执行代码生成AO对象

总结:作用域嵌套会导致程序分析起来比较麻烦 因此做项目时尽量采用同级作用域的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值