javascript - 刚刚看阮一峰的ES6文章时,产生了一个疑问,关于函数参数默认值作用域的。
本文介绍了javascript - 刚刚看阮一峰的ES6文章时,产生了一个疑问,关于函数参数默认值作用域的。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
第一段: var x = 3
var x = 1;
function foo(x, y = function() { x = 2; }) {
var x = 3;
y();
console.log(x);
}
foo() // 3
x // 1
第二段: x = 3
var x = 1;
function foo(x, y = function() { x = 2; }) {
x = 3;
y();
console.log(x);
}
foo() // 2
x // 1
针对这种不同,阮老师给出的解释是这样的:
大家是如何理解第一种情况的?
参考地址:
解决方案
参数自己整体是一个块,仅此而已。你通过断点单步搞明白代码执行的流程,剩下的就是 闭包行为 ,变量名逐级向上,直到 global
。扯那么多没用的 ……
debugger;
var x = 1;
var a = 999;
function foo(x,
y =
function() {
debugger;
console.log(x) // 12
x = 22;
console.log(a) // 999
a = 8;
console.log(a) // 8
z = 123;
return function(){ return x }
}
)
{
debugger;
var x = 3;
var a = 0;
var f = y();
console.log(f()); // 22
console.log(x); // 3
}
foo(12)
console.log(x) // 1
console.log(a) // 8
console.log(global.z) // 123
这篇关于javascript - 刚刚看阮一峰的ES6文章时,产生了一个疑问,关于函数参数默认值作用域的。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文