- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习JavaScript,昨天我觉得我应该复习一些基础知识,所以我选择了“函数”主题。当我从 Mozilla 读到这篇文档时,我看到了这个:
Note: Some JavaScript engines, not including SpiderMonkey, incorrectly treat any function expression with a name as a function definition. This would lead to
zero
being defined, even with the always-false if condition. A safer way to define functions conditionally is to define the function anonymously and assign it to a variable:
if (0) {
var zero = function() {
document.writeln("This is zero.");
}
}
所以我的问题是,因为它说更安全的方式,这意味着这种方式不安全:可能是什么问题?
谢谢。
最佳答案
当您使用 var
声明变量时,它是 hoisted到范围的顶部。因此,您可以编写如下代码:
if (someCondition) {
var zero = function zero() {
// do stuff
};
}
if (zero) {
zero();
}
正确执行时,如果 someCondition
为 false
,zero
将始终为 undefined
。
如果引擎错误地使用命名函数表达式作为函数定义,那么它也会被提升,这意味着zero
将是someCondition
之前的函数甚至被检查。这意味着无论someCondition
是什么,零
都将具有“真实”值。
基本上,任何时候你希望一个值是未定义的
,因为你实际上没有给它分配一个命名函数,它实际上会被分配给一个函数,假设你将该函数命名为相同的函数东西作为你的变量。
关于javascript - 当我们定义一个从未使用过的函数时,可能会有什么缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36207184/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!