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]
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
找到正解,分享给大家
谁说不一样?
就是一样。这里y是个默认参数,你应该知道,不管他。原函数类似:
变量声明会被前置
但是
var声明的变量遇到冲突的时候是会被忽略的。因为参数叫x这里var x就相当于没有。怎么会不一样呢?
这句话说的是
fucntion () { x = 2;}里面的 x 和var x = 3的 x 不是一个 x。这个例子主要说明,当函数默认参数中定义匿名函数的时候,相当于在外层定义的这个函数,而不是在函数体中定义了这个函数。
前者由于没有
var所以这个 x 是全局变量,后者是局部变量。