Javascript I';已声明全局变量,但可以';t使用函数重新分配它

Javascript I';已声明全局变量,但可以';t使用函数重新分配它,javascript,function,Javascript,Function,代码如下: var num = 3 myFunction(num) function myFunction(aNumber) { aNumber = 20 } console.log(num) 它仍然说'num'是3,我想知道为什么?您不必将全局变量传递到函数中来重新分配它们 function myFunction() { num = 20 } console.log(num); JS没有指针。您正在将20赋值给aNumber参数,该参数接收当前值num,但与num无关m

代码如下:

var num = 3

myFunction(num)

function myFunction(aNumber)
{
    aNumber = 20
}

console.log(num)

它仍然说'num'是3,我想知道为什么?

您不必将全局变量传递到函数中来重新分配它们

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

JS没有指针。您正在将
20
赋值给
aNumber
参数,该参数接收当前值
num
,但与
num
无关
myFunction(num)
num
读取值3,并将值(不是变量)传递到
myFunction
myFunction
接收参数
aNumber
中的值
aNumber=20
将值20存储在
aNumber
中,这对
num
没有任何影响,因为函数从调用中不知道任何关于
num
的信息(它通过其他方式知道,但这与
aNumber
参数无关)。
myFunction
可以更新
num
,直接执行
num=20
,因为
myFunction
是定义
num
的上下文的闭包。如果它不是定义了
num
的上下文上的闭包,它将无法直接更新它。通常通过函数更新变量的方法是让函数返回新值:
num=myFunction(num)
function myFunction(aNumber){return aNumber+10;}
,它向传入的值添加10并返回新值。在上面的例子中,这将返回13,然后将其分配给
num
.True,但这假设函数总是希望变异
num
变量。给定原始代码,它将能够对传入的任何变量进行变异(如果它以这种方式工作的话)。