var x=10; function cals(myNum) { return x+myNum; }
NaN
17
107
10
7
var x=10; function cals(myNum) { console.log(typeof x); // number console.log(typeof myNum); // number return x+myNum; } console.log(cals(7)); // 17
小刘啊,我要用x + mynum 小刘:好的,请稍等!小刘找啊找,发现函数内部根本没有x这个变量,于是小刘就到外面去找,就找到了一个var x=10 ,相当于在函数内部声明了一个变量var x ,clas(mynum)mynum为行参, clas(7)为实参 实参为7 ,那么开始执行吧! x + mynum (10 + 7) 数字类型相加 得出17
此题考查闭包,闭包是函数和函数作用域链的组合,广义来看,任何函数都是闭包。
此题 cals 函数中引用了变量 x,而它的作用域中并不存在 x 的定义,则会沿着作用于链往上找,在全局作用域中找到了 x。作用域链作为 cals 执行上下文的一部分,由静态词法作用域链 [[scope]] (在此仅包含全局作用域)和当前执行上下文的活动对象(AO)一同组成。
var a; function b(c){ return a + c; } a = 10; // 其实在调用函数时,全局变量a已经被赋值了,那么函数里面的a就是10 console.log(b(7));
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题