JS这道题,你答对了吗?

84 阅读1分钟
var a = {}
function b(a) {
    a.name = 'ysg'
    a = []
    console.log(a)
}
b(a)
console.log(a)

只有变量的声明会被提升,而变量的初始化不会被提升。

 // 变量提升
        function c() {
            console.log(cc) // undefined
            var cc = 1
            console.log(cc) // 1
        }

因此,在函数 b 内部,a 的值是 undefined,直到它被赋值为 {}。这就是为什么在函数 b 内部,a.name = 'ysg' 这一行可以正常工作,因为 a 已经被声明,但它的值是 undefined,直到它被赋值为 {}

参数本质上是按值传递给函数的——因此,即使函数体的代码为传递给函数的参数赋了新值,这个改变也不会反映到全局或调用该函数的代码中

如果你将对象作为参数传递,而函数改变了这个对象的属性,这样的改变对函数外部是可见的。

函数参数相当于函数内部的局部变量,它们的值是调用函数时传递给它们的值。在函数内部对参数的修改不会影响到原始的变量,除非参数是一个对象,并且你修改了对象的属性。

image.png 上图中本地作用域中有一个变量a,全局作用域中也有一个变量a。

image.png 这张图中,本地作用域中没有变量a,全局作用域中有一个变量a,函数b中调用的是全局作用域中的变量a。