博客列表 >es6 形参的陷阱

es6 形参的陷阱

子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong
子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong原创
2018年02月28日 08:59:05781浏览

先看代码:

var x = 1;
function s (a,y = function (){ x = 2 }){
    var x = 1;
    y();
    console.log(x)
}
s();
console.log(x);

问题:写出上述代码的执行时的打印结果?



这是昨天(2017-2-27)面试一家公司时遇到的问题,其实一开始我的想法是,执行s后,y开始执行的时候,就近原则,y中修改的应该是s内部的x,但是很明显是错的。

原因也很简单,就是定义函数时作用域链就已经形成了,而不是执行时生成的,执行时只是在作用域链上添加了一个保存他局部变量的对象,仅此而已。

上述调用s时,相当于 s( , function (){ x = 2 });所以形参是在函数外面定义的,因此y能访问的变量只能是全局的x。


记坑完毕!

(关于原型链可以参考我的博文: 闭包


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议