在 2016 年的某天,因為想試看看臉書的引文功能,就花了一些時間在看他們的 SDK 在幹麻。以下是其中一段
Copy var newHTML2 = document.createElement('div');
// newHTML2.innerHTML='<div class="fb-quote">second</div>';
newHTML2.setAttribute("id","fb-root");
document.body.appendChild(newHTML2);
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/zh_TW/sdk.js#xfbml=1&version=v2.6";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
那時候我就在想:
Copy (function d, s, id){
// code
}(document, 'script', 'facebook-jssdk'))
這段到底在寫什麼? 我怎麼都看不懂? 後來無意間才發現這個寫法叫做「立即函式」。
立即函式是什麼
立即函式就是一種能夠「現在,馬上,立刻!」執行的函式。有幾種狀況會使用到它:
立即函式有兩種寫法,差別只是括號放在最後、或是傳入參數的前面而已
Copy // 第一種
(function(arg){// 程式碼}(in));
// 第二種
(function(arg){// 程式碼})(in);
函式呼叫
函式就是用變數 or 函數名,將一段語法包起來。之後呼叫變數名 or 函數名叫能使用這段語法。函式呼叫有三種寫法:
第一種是具名函式,他的函式是有名字的。例如本例的函式名字叫做 add()
Copy //具名函數
var addfun = function add(a,b) {
return a + b;
}
第二種是匿名函式,只能透過 addfun
這個變數來呼叫
Copy //匿名函式
var addfun = function (a,b) {
return a + b;
}
第三種是函式宣告式,function 也有名字
Copy //函數宣告式
function add(a,b) {
return a + b;
}
實字 literal
實字是產生物件的一種方式。JS 產生物件(實例)有兩種方式: 建構式和實字,例如 json 格式就是一種實字。
Copy // 實字
var obj1 = { name : "總裁實字",
height : 170,
say : function(){
return "I am " + obj1.name;
}
},
result = obj1.say();
// 建構式
// js 沒有 class 概念,要用函式模擬
function Person(name){
// var this = {};
this.name = name;
this.say = function(){
return "I am " + this.name;
};
// return this;
};
var adam = new Person("海綿寶寶");
console.log(adam.say());
Copy <h1>
<p id="demo> paragraph </p>
</h1>
相關連結