Ian*_*vis 10 javascript jquery
HTML:
<script type="text/javascript">
var x = "overriden";
</script>
<script src="myjs.js"></script>
Run Code Online (Sandbox Code Playgroud)
myjs.js:
$(document).ready(function(){
var x = x || "default val";
alert(x); // this alerts "default val" and not "overriden"
});
Run Code Online (Sandbox Code Playgroud)
由于某种原因,x最终结束了,甚至"default val"没有"overriden",甚至"overriden"在我甚至包括脚本引用到myjs.js之前我将它设置为.
知道为什么会这样吗?我正在尝试启用托管页面为包含的js文件中使用的变量设置覆盖,否则使用默认值val.
应用变量声明提升后的内容:
var x;
x = 5;
$(document).ready(function(){
var x;
x = x || "default";
});
Run Code Online (Sandbox Code Playgroud)
它查看最接近的x并且看到它的值undefined是一个假值,因此x设置为"default".
var x = 5;
var x = x || "default";
Run Code Online (Sandbox Code Playgroud)
实际上只是
var x;
x = 5;
x = x || "default";
Run Code Online (Sandbox Code Playgroud)
这被认为是完全没有意义的:
$(document).ready(function(){
x = x || "default";
});
Run Code Online (Sandbox Code Playgroud)
它将抛出一个ReferenceErrorif x未定义.
$(document).ready(function(){
var x = window.x || "default";
});
Run Code Online (Sandbox Code Playgroud)
无效的属性读取不会导致ReferenceError但只返回undefined.