<script type="text/javascript">
var a;
(function (){
if(a){
alert(a)
}else{
alert("728");
}
})()
(function (){
if(!a){
alert(a)
}else{
alert("728");
}
})()
//上面代码应该alert()两次,可为什么只有第一个alert()蹦出了个728,本应该再弹出第二个undefined,但如果我把第一个匿名函数删除的话就会弹出undefined,这是怎么回事?
</script>
var a;
(function (){
if(a){
alert(a)
}else{
alert("728");
}
})()
(function (){
if(!a){
alert(a)
}else{
alert("728");
}
})()
//上面代码应该alert()两次,可为什么只有第一个alert()蹦出了个728,本应该再弹出第二个undefined,但如果我把第一个匿名函数删除的话就会弹出undefined,这是怎么回事?
</script>
<script type="text/javascript">
var a;
(function (){
if(a){
alert(a)
}else{
alert("728");
}
})(); // 加个结束符看看
(function (){
if(!a){
alert(a)
}else{
alert("728");
}
})();
</script>
var a;
(function (){
if(a){
alert(a);
}
else{
alert("728");
}
})(); //你的代码里少了分号,没有结束,会报错(function (){
if(!a){
alert(a);
}
else{
alert("728");
}
})()
</script>
alert(a)
}错误在这里.!a 需要复值判断.因为你没有值 所以没有定义.你可以给A = 1 你再测试就明白了
但是LZ这个是个特殊情况,混淆了出现这种情况,跟JS是如何解释执行有关
JS中有一些语句是可以分行写的,分号;是强制性将语句终结
比如:
var a = 1;
等价于
var a
=1;var str = "aaa"+"bbb";
等价于
var str = "aaa"
+"bbb";JS的语句是否结束不是看是否到行尾,跟下一行的内容也有关
下行的内容除了上面2中情况以外,也包括其他众多情况,JS认为语句未结束
其中就包括小括号(),即LZ遇到的情况
var str = "aaa"
var str1 = "bbb"
不会报错但是如果
var str = "aaa"
(function (){
alert(str);
})()
这就会报错
所以,写JS代码的时候还是规范书写比较好
语句结束就加分号强制结束
if(a){
alert(a)
}else{
alert("728");
}
})()
(function (){
if(!a){
alert(a)
}else{
alert("728");
}
})()
楼上朋友,我意思是红字这个括号里的内容是被当做上面执行函数的参数了,这样感觉好像也说不过去哦!
因为上面那匿名函数里面也没有return返回个函数呀?真不知道该怎么去理解?