IE是否为每个脚本标记创建新的作用域
Does IE create new scope for each script tag?
为什么下面的html文件在IE中显示为默认标题?其他浏览器将标题显示为mytitle。
<script>
window.mylib = window.mylib || {};
mylib.title = 'mytitle';
</script>
<script>
var mylib = mylib || {};
document.title = mylib.title || 'default';
</script>
IE是否为每个脚本标记创建了一个单独的作用域?
这只是一个错误吗?或者为什么行为不同?
(在IE8和最新的chrome/ff/opera中测试)
HTML <script>
标记Javascript在window
的作用域中执行。因此,在相同的作用域上执行分离的脚本标记。
特别是对于IE7,尽量不要在第二次重新定义变量:
代替
var mylib = mylib || {};
使用
mylib = window.mylib || {};
当遇到var mylib
时,IE7可能会覆盖mylib
的定义。
作用域不应该是个问题。每个<script>
都应该在相同的全局范围内进行评估。
然而,window.mylib = ...
在IE8中似乎并不是一个实际的声明。因此,用var mylib
跟随它会导致对undefined
的覆盖/重置。
<script>
window.mylib = {};
</script>
<script>
console.log(typeof window.mylib); // object
</script>
<script>
var mylib;
console.log(typeof window.mylib); // undefined
</script>
当在整个过程中使用var mylib
或window.mylib
时,它应该按预期工作。看来问题出在混合物上。
<script>
var mylib = mylib || {};
mylib.title = 'mytitle';
</script>
<script>
var mylib = mylib || {};
document.title = mylib.title || 'default'; // 'mytitle'
</script>
您正在初始化第一个<script>
标记中的window.mylib
。在第二个<script>
标记中,使用mylib
而不是window.mylib
初始化var mylib
。然后将title
的值与此进行核对。如果我能正确理解的话,似乎会有一些逻辑问题。
<script>
的作用域是窗口,因此只要变量或函数被正确定义和/或初始化,访问变量或函数的数量和位置都无关紧要。
相关文章:
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- 为什么在创建作用域时将参数传递给anon函数
- JavaScript作用域:如何创建具有不同值的匿名函数
- 阻止控制器创建新的作用域对象
- 阻止“ng include”创建孤立的作用域.AngularJS
- AngularJS-由$scope创建的作用域何时执行$new()已删除.垃圾收集器或Angular负责处理它吗
- 如何创建作用域的动态、基于实例的对象文字
- 角度:创建可以调用作用域函数的自定义指令
- 作用域变量正在创建引用而不是新实例
- 作用域和将参数传递给动态创建的事件处理程序时出现问题
- 我应该如何创建一个作用域到另一个模型的主干集合
- 在AngularJS中创建子作用域的所有指令是什么
- IE是否为每个脚本标记创建新的作用域
- Javascript:从类内部创建全局作用域函数
- 从字符串创建的函数看不到父作用域
- '这'当创建函数存储在哈希中的JS对象时,其作用域为窗口对象
- ng如果在创建子作用域时打断网格
- 在AngularJS的1.3和2版中创建指令作用域的方式是一样的
- 如何创建不隔离作用域的递归Angular.js模板