var kim = kim || {};
kim.prototype = {
init : function (obj, i) {
console.log('Hello World')
},
closeWindow : function (obj1, obj2) {
obj1.onclick = function () {
obj2.style.display = "none"
}
}
}
//调用
function lala(){
var First = document.querySelector('.first'),
firstBody = document.querySelector('.first_body'),
Btn = document.querySelector('.btn'),
btnBody = document.querySelector('.btnbody');
var myFunc = kim.prototype;
myFunc.init(First, firstBody);
myFunc.closeWindow(Btn, btnBody);
}
lala();
这么调用没问题,但是写成以下自执行函数就报错
(function(){
var First = document.querySelector('.first'),
firstBody = document.querySelector('.first_body'),
Btn = document.querySelector('.btn'),
btnBody = document.querySelector('.btnbody');
var myFunc = kim.prototype;
myFunc.init(First, firstBody);
myFunc.closeWindow(Btn, btnBody);
})()

新手不知道什么原理?不吝赐教,谢谢了
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
IIFE前面最好加上分号
;原因就在于代码压缩之后会出现以下情况:
这样就成了obj调用,就会报错,加上了分号
这种尴尬就没有啦
在
后面加上
分号。我估计是把后面的自调用的()当成传参数什么了。需要再确认一下。我感觉问题可能是出现在没有等网页加载完成再去执行.你把你的那个自动执行的行数写在
分号真的好吝啬……
建议把
document和kim传进IIFE里试试,写成这样:估计这是JS的【变量提升】搞的鬼。
可以这样简单理解:
这是我个人对这个概念形象的理解,希望对你有帮助