javascript - 为什么函数中初始化的变量可以全局访问?
问题描述
当在函数范围内初始化变量时,除了函数本身之外,大概没有任何东西可以访问该变量。
为什么有时可以全局访问函数中的变量初始化?
下面是一些代码:
function sayHello() {
a = 'hello';
console.log(a);
}
}
吊装后居然变成了这样:
function sayHello() {
var a; // undefined
a = 'hello';
console.log(a);
}
}
sayHello() // outputs 'hello'
console.log(a) // Reference error: a is not defined.
这一切都很好,直到发生这种情况:
function sayGoodbye() {
var b = 'Goodbye';
}
吊装后居然变成了这个
function sayGoodbye() {
var b;
b = 'Goodbye'
}
sayGoodbye() // undefined
console.log(b) // outputs 'Goodbye'
为什么在调用 sayGoodbye 之后,变量 b 可以全局访问或在函数范围之外访问,而对于 sayHello,存在引用错误?
console.log 是否与更改范围有关?
解决方案
如果您在不使用严格模式的情况下分配变量而不声明它成为全局变量。
function sayGoodbye() {
b = 'Goodbye';
}
它成为了
var b;
function sayGoodbye() {
b = 'Goodbye';
}
推荐阅读
- c++ - 错误的值正在使用 c++ 从 CSV 文件数据写入数组
- android - 自定义 EditText 用户界面
- node.js - 将图像 URL 转换为 base 64,节点中没有画布或 XMLHttpRequest
- excel - 如何通过 VBA 输入实际文本(如真正的键盘敲击)?
- javascript - 自定义样式选择框上的 Tabindex
- javascript - 从公共文件夹导入到 src Reactjs
- regex - 如何使用正则表达式查找和替换字符串的开头和结尾
- javascript - 具有自调用功能的 setTimeout
- django - 检查用户名是否存在于数据库中
- javascript - BABEL 注意:代码生成器对 D:\xxxxx\middleware\dist\_nuxt\6491bb123b397e949a0b.js 的样式进行了优化,因为它超过了 500KB 的最大值