2017-04-17 52 views
0

这里是代码不能重新分配它:我已经声明了全局变量,但使用功能

var num = 3 

myFunction(num) 

function myFunction(aNumber) 
{ 
    aNumber = 20 
} 

console.log(num) 

它仍然说,“民”是3,我想知道为什么吗?

+1

JS没有指针。您将'20'分配给'aNumber'参数,该参数接收当前的num值,但与num不相关。 – 2017-04-17 13:31:39

+0

'myFunction(num)'*从num中读取值3,并将该值(不是变量)传递给myFunction。 'myFunction'在参数'aNumber'中接收该值。 'aNumber的= 20'专卖店在'aNumber'值20,这无论如何对'num'没有影响,因为该函数不知道'num'从通话(但通过其他方式做任何事情,但是这没什么用'aNumber'参数来做)。 –

+0

'myFunction' *可以*更新'num',通过这样做'NUM = 20'直接,因为'myFunction'是在上下文中的封盖,其'num'定义。如果它*不是在定义了'num'的上下文的闭包,它将不能直接更新它。 –

回答

0

你不必全局变量传递到函数来重新分配。

function myFunction() { 
    num = 20 
} 
console.log(num); 
+0

确实如此,但是这个假设函数总是想要改变'num'变量。鉴于原始代码,它可以改变任何传入的变量(如果它以这种方式工作的话)。 – 2017-04-17 13:39:43