javascript - 关于js自执行函数报错的问题
本文介绍了javascript - 关于js自执行函数报错的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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);
})()
新手不知道什么原理?不吝赐教,谢谢了
解决方案
IIFE前面最好加上分号;
;(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);
})()
原因就在于代码压缩之后会出现以下情况:
// obj <obj>
var a = obj(function () {})()
这样就成了obj调用,就会报错,加上了分号
// obj <obj>
var a = obj;(function () {})();
这种尴尬就没有啦
这篇关于javascript - 关于js自执行函数报错的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文