var x = 1;
function foo(x, y = function() { x = 2; }) {
var x = 3;
y();
console.log(x);
}
foo() // 3
函数参数x,和var x中的x说是不一样,谁帮忙解释一下,原因或者是原理?(代码是es6写法)
以下是原出处,阮一峰的es6教程
][1]
var x = 1;
function foo(x, y = function() { x = 2; }) {
var x = 3;
y();
console.log(x);
}
foo() // 3
函数参数x,和var x中的x说是不一样,谁帮忙解释一下,原因或者是原理?(代码是es6写法)
以下是原出处,阮一峰的es6教程
][1]
谁说不一样?
就是一样。这里y是个默认参数,你应该知道,不管他。原函数类似:
function foo(x) {
var x = 3;
console.log(x);
}
变量声明会被前置
function foo(x) {
var x;
x = 3;
console.log(x);
}
但是var
声明的变量遇到冲突的时候是会被忽略的。因为参数叫x
这里var x
就相当于没有。
怎么会不一样呢?
这句话说的是fucntion () { x = 2;}
里面的 x 和 var x = 3
的 x 不是一个 x。
这个例子主要说明,当函数默认参数中定义匿名函数的时候,相当于在外层定义的这个函数,而不是在函数体中定义了这个函数。
前者由于没有var
所以这个 x 是全局变量,后者是局部变量。
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
找到正解,分享给大家