为了账号安全,请及时绑定邮箱和手机立即绑定

js作用域 函数调用

js作用域 函数调用

RISEBY 2019-03-20 22:18:36
function A(){    var a=1;    var d=2;    B(d);}function B(d){    console.log(a);}A() //Error a is undefined对js函数执行的作用域一直有点不明白想问一下,像上面的代码,因为在函数A内部调用B函数,那整个作用域链不是应该是B-A-window嘛?那我如果是找a,在作用域链最顶端(即B)找不到a之后,为啥不在A中找,好像直接就在全局环境中了是吗?麻烦能告知除了传a参数进去还有什么别的解决办法,谢谢啦~~
查看完整描述

5 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

js的作用域是词法作用域无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的位置决定。
如果把B定义在A里面,B就可以读到a了。

查看完整回答
反对 回复 2019-04-10
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

不是看调用的情况,是看如何定义的。
如果你在函数A中定义函数B,B的作用域链就是B-A-window

查看完整回答
反对 回复 2019-04-10
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

这个是规范。

你的例子中a无论如何在B中是访问不到的,而


function B(d){ // 这个d是本地名义变量,一个参数名,和A定义中的d没有任何关系

    console.log("a");

}

function A(){

    var a=1;

    var d=2;

    B(d);// 这里用的值传递的方式让B内部的局部变量d有了A内局部变量d的值,但B仍然不能访问到A中的局部变量a。


}

你理解的在B中调用时的B-A-window这样的变量查询路径是想当然的,其实对B来说只有B-window,入口传的参数是另外一回事,和变量查询路径没有绝对关联。


查看完整回答
反对 回复 2019-04-10
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

函数作用域在函数定义的时候确定,B的定义在全局环境中,B的作用域是全局作用域。


查看完整回答
反对 回复 2019-04-10
  • 5 回答
  • 0 关注
  • 403 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信