我正在尝试学习 JavaScript 的基础知识,但遇到了一些我并非完全 100% 了解的事情。这是没有在函数内声明 my_number 变量的代码:
var my_number = 7; // this has global scope
var timesTwo = function(number) {
my_number = number * 2;
console.log("Inside the function my_number is: ");
console.log(my_number);
};
timesTwo(6);
console.log("Outside the function my_number is: ")
console.log(my_number);
这输出到: 在函数 my_number 中是:12 在函数 my_number 之外是:12
首先,根据我的阅读,如果您不在函数内声明您的变量,它将采用同名全局变量的值。我对这里发生的事情的猜测是,当函数调用传递数字 6
时,它将它传递给函数,进行乘法并将结果 (12) 记录到控制台。函数结束后,它会保留该值 12
(基本上覆盖全局值?)并再次将数字 12
记录到控制台。
另一方面,当我在函数中声明变量时,var my_number = number * 2;
它像我期望的那样工作并打印出 12
在函数内部并为最后一行代码使用全局变量 7
。
var my_number = 7; // this has global scope
var timesTwo = function(number) {
var my_number = number * 2;
console.log("Inside the function my_number is: ");
console.log(my_number);
};
timesTwo(6);
console.log("Outside the function my_number is: ")
console.log(my_number);
在函数 my_number 中是:12
在函数 my_number 之外是:7
我的理解是否正确? 特别是第一段代码。我想在继续之前完全掌握这个概念,这对我来说似乎很重要。
最佳答案
你的理解似乎没问题,但我不确定以下声明:
Once the function has ended it keeps that value
12
(essentially overwrites the global value?)
这与函数结束无关。由于函数中没有具有该名称的局部变量,my_number
的每次出现都直接引用全局变量,该变量在赋值中写入并在日志语句中读取。 timesTwo
函数没有自己的变量副本。
关于javascript - JavaScript 示例中的全局与本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28592961/