使用()
將function expression放入其中策泣,告訴編譯器里面的是個(gè)expression, 立刻調(diào)用這個(gè)function。 這在很多庫里面很多見洪囤。
我想到一點(diǎn)是挟纱, 這樣我們可以聲明自己的變量而不擔(dān)心和其它的沖突。
javascript 在瀏覽器中状土,我們會把所有的代碼順序執(zhí)行无蜂,包括庫中的,所以名字有可能覆蓋蒙谓。
var firstname = 'Hao';
(function(name) {
var greeting = "Hello ";
console.log(greeting + name);
}(firstname));
// 把括號取出來也行
(function(name) {
var greeting = "Hello ";
console.log(greeting + name);
})(firstname);
// 當(dāng)執(zhí)行下面這個(gè)function時(shí)斥季, s被綁定到this的一個(gè)屬性了, 所以不需要聲明累驮,不需要使用new
func1 = function (){
s = 'not use new';
}
func1();
console.log(this.s);
// 當(dāng)執(zhí)行下面這個(gè)function時(shí)酣倾,我們聲明了一個(gè)變量 s, 當(dāng)func結(jié)束時(shí)谤专,這個(gè)func的執(zhí)行環(huán)境沒了躁锡,s也消失了即我們回到了一個(gè)沒有s的主環(huán)境中。
func2 = function (){
var s = 'use new';
}
func2();
console.log(func2);
image.png
下面這個(gè)例子置侍,方程執(zhí)行完后映之,greeting 還是 Hola,不會被影響墅垮。
var greeting = "Hola";
(function(global, name) {
global.gg = "change the global obj";
var greeting = "Hello ";
console.log(greeting + name);
})(window, "John");
console.log(greeting); // Hola
如下圖:
image.png