JavaScript是按引用传递还是按值传递语言?
Javascript是一种按值传递的语言。但是对于对象,值是它们的参考。因此,例如,如果将int作为参数传递给函数并在函数中增加其值,则其值不会在调用者的上下文中更新-
示例
let i = 0; function increment(x) { x = x + 1 console.log(x) } increment(i) console.log(i)
输出结果
1 0
当您传递对象并在函数的上下文中更新该对象的引用时,这不会影响该对象。但是,如果您更改了对象的内部,那将反映在对象中。
示例
let obj = {'foo': 'bar'}; function updateRef(x) { //x的本地引用获取更新,不影响obj- x = {} } function addHelloWorld(y) { //引用的对象 y['hello'] = 'world'; } console.log(obj) updateRef(obj) console.log(obj) addHelloWorld(obj) console.log(obj)
输出结果
{ foo: 'bar' } { foo: 'bar' } { foo: 'bar', hello: 'world' }
请注意,对象引用更改不会影响对象。重新分配了局部变量x。但是,在第二个函数中,y引用了obj对象并对该对象的内部状态进行了更改。这引起了原始对象的变化。