为什么我需要将代码包装在立即调用的函数表达式中?

Why I need to wrap the code in immediately invoked function expression?

1) 为什么我需要将下面提到的代码包装在 (function(){})(); 中,否则它会在 JS linting 期间抛出错误,并且 2) 如果将 "use strict"; 放在 [=11] 之上,我也会收到错误=] 我想的是把 "use strict"; 放在页面的第一行。

请告诉我这两种行为。

我的工作代码-

(function(){
"use strict";

// Constructing constructor function
// whose purpose is to create new 
// Person Objects
var Person = function(name) {
    this.name = name || "TestUser";
    this.hobbies = [];
};

Person.prototype.setHobby = function(hobby) {
    this.hobbies.push(hobby);
};

Person.prototype.getHobbies = function() {
    return this.hobbies;
};


exports.Person = Person;

var peter = new Person('peter');
peter.setHobby('Gambling');
peter.setHobby('Street Fighting');
peter.setHobby('Smoking');

peter.getHobbies();
})();

使用

/*jshint node: true */

在文件的顶部。即使删除了 IIFE,它也会以优异的成绩通过 jshint。

我不会推荐 jslint。你将用你的余生与它作斗争并调整你的代码让它闭嘴。