虽然编码我意识到某些变量名称,如top
,self
,left\right
当您尝试使用它们时会产生各种错误。 JavaScript背后的原因是什么,而其他语言可以使用它们?为什么我不能在JavaScript中使用某些变量名?
回答
您不能将它们用作全局变量,因为已经存在具有这些名称的全局访问器属性。
top
用于访问顶部框架。self
用于访问全局对象。- 据我所知
left
和right
没有问题。
console.log(Object.getOwnPropertyDescriptor(window, 'top'));
console.log(Object.getOwnPropertyDescriptor(window, 'self'));
尝试一些值分配给这些变量将运行二传手,这可能不是你所期望的。如果只有一个getter但没有setter,那么这个分配将在马虎模式中被忽略,并进入严格模式。
使用这些名称作为局部变量没有问题。反正你不应该使用全局变量。
(function() {
var top = 123; // local variable
console.log(top === 123); // true - no problem
})();
var top = 456; // global variable
console.log(top === 456); // false !!!
在大多数情况下,在JavaScript中使用带有这些名称的变量没有任何问题。
在某些环境中,某些名称已用于现有全局变量并且是只读的。
top
就是这样一个例子,它指的是the top level frame。
您仍然可以将其用作非全局上下文中变量的名称。
大多数情况下,您可以使用变量而不用var
/let
声明它们,并且在这种情况下,您可以修改全局执行环境的属性。
在浏览器,全球执行环境window
,所以当你
self = '...'
你有效地做好
window.self = '...'
self
,top
,left
,right
为可具有window
对象的属性某些非标准行为。 window
对象的许多内置属性实际上是隐式设置器,它不仅仅是设置变量 - 它们还可以修改当前页面,导航等。此外,window
的许多内置属性不能被覆盖,因此分配给它们没有效果。
相反,当你做
(function() {
var self = '...'
})()
你不应该有任何问题。
你需要调用一个函数,使其正常工作,创建一个新的范围,因为在全球范围内,即使有var
,你还是一个属性隐含分配给window
。
'var self'在全球范围内可能仍然存在问题。 – Oriol
好点 - 我暗示假设使用函数内。更新 –
- 1. 为什么我不能从某些函数(JavaScript)中访问变量?
- 2. 为什么我不能像类名一样使用变量名?
- 3. 为什么在“热度”计算中使用某些变量?
- 4. 为什么我不能在Quartz.NET中为'typeof'使用变量?
- 5. 为什么'删除'不能在javascript中使用局部变量?
- 6. 为什么我不能在存储过程中使用变量作为表名?
- 7. 为什么我不能在Lazarus中使用“data”作为变量名称
- 8. 为什么我不能在javascript中访问这个变量?
- 9. 为什么人们在某些情况下使用变量?
- 10. 为什么我不能在LoginView中使用迭代变量?
- 11. 为什么我不能在TRecord中使用变量?
- 12. 为什么我不能在JAVA方法中使用该变量?
- 13. 为什么我不能在Jquery Selector中使用变量?
- 14. 为什么我不能在IF语句Javascript中使用条件变量?
- 15. 为什么我不能在Javascript中使用Django的字符串变量?
- 16. 某些JavaScript功能不适用于Chrome浏览器,为什么?
- 17. 为什么私有静态变量在某个时刻变为空,我能做些什么来解决?
- 18. 为什么不可能使用变量调用类别别名?
- 19. Javascript - 为什么我不能将style.color设置为变量?
- 20. 为什么我不能更改变量?
- 21. 为什么不使com.fasterxml.jackson.databind.ObjectMapper中的某些方法变为静态?
- 22. 为什么这些函数不能看到我的变量?
- 23. 在javascript中为什么我们使用var来声明变量?
- 24. 为什么不能在JavaScript中用函数变量覆盖字符串变量?
- 25. 为什么我不能在WEB-INF之外打包某些JAR
- 26. 为什么在我的javascript变量
- 27. 为什么php变量不能使用javascript循环?
- 28. 为什么我不能在Firefox中使用一些SVG?
- 29. 为什么我不能在函数中使用使用prompt()创建的变量?
- 30. 为什么Active Record在内部为某些功能使用module_eval?
底层语言,ECMAScript的,具有约40 *保留字*](http://ecma-international.org/ecma-262/7.0/index.html#sec-保留字)。它实现的主机环境(通常是浏览器中的JavaScript)也可能具有您需要避免的全局变量。 – RobG