<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<button id='chg'>change</button>
<iframe id='frame' src=''></iframe>
<script>
function $id(id){
return document.getElementById(id);
}
var btn=document.getElementById('chg');
var tip=true;
btn.onclick=function(){
alert('你居然在按钮没有被按下的时候就触发了!!!');
}
(function(){
var iList=document.getElementsByTagName('iframe');
for (var i=0;i<iList.length;++i)
{
iList[i].onload=function(){
this.style.height=this.contentWindow.document.documentElement.scrollHeight+'px';
}
}
}());
</script>
</body>
</html>
iframe:这锅我不背。
兄弟这样看你看到了什么?
btn.onclick=function(){
alert('你居然在按钮没有被按下的时候就触发了!!!');
}(calegeca);
var calegeca = function() {
var iList = document.getElementsByTagName('iframe');
for (var i = 0; i < iList.length; ++i) {
iList[i].onload = function() {
this.style.height = this.contentWindow.document.documentElement.scrollHeight + 'px';
}
}
}();
尽量使用“;”号哦;在闭包前加,效果更好哦;
;(function(){
//calegeca
}())
函数声明不可以直接用()调用,函数表达式可以直接用()调用。
“函数声明” 与 “函数表达式” 之间的区别就是 function 是不是那一行的句首的第一个单词。
函数声明 可以在声明所在的作用域中被调用, 函数表达式 只能在函数表达式中调用自己。
函数声明
function foo(){console.log(1)};
foo(); //=> 1
函数表达式
var a = function bar(){}();
!function baz(){}();
(function baa(){}());
(function draw(){
requestAnimationFrame(draw);
})();
draw(); //=> ReferenceError: draw is not defined
参考1
;(function(){
})()
对比
;(function(){
}())
对比
;function(){
}()
btn.onclick=function(){
alert('你居然在按钮没有被按下的时候就触发了!!!');
};
这里}后面缺个分号,你竟然想让iframe背锅
JS 大部分时候可以省略分号,除了以 () 或 [] 等开头的五种情况的时候。
好吧,我没看出来!
看了 评论 我才看明白 问题 。。。。。
吓到我了……
所以 js 分号还是加的好。。。
onclick方法后面没加分号。。。恰好后面跟了个自执行函数。。。
[哭笑不得的表情]
我觉的这题可以当做面试题来考了。看了好久。。。才懂[哭笑不得的表情]
同意楼上把这题作为面试题,在感受到js这门缺个分号就能把函数定义变成IIFE的语言的威力之后,新手再也不会忘记加分号了哈(不用分号的大神请无视)
我还以为有黑科技。。