javascript - 关于js自执行函数报错的问题

查看:139
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆