關於JS函式部分的筆記

2021-09-13 19:19:19 字數 2526 閱讀 1619

首先來理解一下什麼事物件:ecma-262是這樣定義的「無序屬性的集合,其屬性可以包含基本值、物件或者函式」,也就是說,物件是『名/值』對的集合。

var person=new object();

person.name="jake";

person.age=18;

person.sayname=function()

上面的例子建立了乙個名為person的物件,並為它新增了兩個屬性:name、age和乙個方法sayname。其中sayname用於顯示this.name(將被解析為person.name)的值。

我們來看一段**:

var add=function(a,b)
函式字面量包含4個部分,分別是:

函式字面量可以出現在任何允許出現的地方,也可以定義在其他函式中。乙個內部函式除了可以訪問自己的引數和變數,同時它也能自由地訪問它的父函式的變數和引數。通過函式字面量建立的函式物件包含乙個連線到外部上下文的鏈結。這被稱為閉包

閉包這個概念是js這門語言中乙個非常重要而且是很難掌握的知識點!

這裡只能淺顯地解釋一下什麼是閉包

我們用一些**來解釋這個定義:

function foo()

return bar;

}var baz=foo();

baz();//2 <--這就是閉包的效果

函式bar()的詞法作用域能夠訪問foo()內部作用域,然後將bar()函式本身當作乙個值型別進行傳遞。

在foo執行後,其返回值 bar()賦值給變數baz並呼叫baz(),實際上只是通過不同的識別符號引用呼叫了內部的函式bar()。

在foo執行後,foo內部作用域不會被銷毀,因為一直都是bar()本身在使用,所喲foo內部作用域依然存在且能夠一直存活,以供bar隨時進行引用。

bar依然對該作用域保持引用,而這個引用就叫作閉包。

作用域的作用:控制著變數與引數的可見性以及生命週期。

定義在函式內部的引數和變數在函式外部是不可見的,而在乙個函式內部任何位置定義的變數,在函式內部任何位置都可見。

var f00=function();

//此a=3,b=5,c沒有定義;

bar(); //此時a=21,b=5;

}

方法呼叫模式

當乙個函式被儲存為物件的乙個屬性是,我們稱之為方法。當乙個方法被呼叫時,this被繫結到該物件,當物件與方法用「.」來連線時,那麼它就被當作乙個方法來呼叫了。

var person=

};person.sayage(19);

docunment.writeln(person.age);//19

2.函式呼叫模式

當乙個函式並不是乙個物件的屬性時,那麼它就是被當作乙個函式來呼叫的

var myobject=

//新增乙個新的方法

myobject.do=function(value);

helper();

}myobject.do(3);

console.log(myobject.value)//6

這裡面遇到乙個問題,就是在helper函式內部的this指向的時這個函式本省,而不是全域性物件。我們找到乙個很好的解決方法,那就是將this賦值給乙個全新的變數that,那麼內部函式就可以訪問到this,這樣就避免了內部函式裡面的this錯誤的繫結。

3 構造器呼叫模式

乙個函式,如果建立的目的就是希望結合new字首來呼叫,那就被稱為建構函式

如果乙個函式前面帶上new來呼叫,那麼就會建立乙個連線到該函式的prototype(原型)成員的新物件,同時函式中的this會繫結到這個新物件中。

var myobject=function(string)

myobject.prototype.get_status=function()

//建立例項

var newobj=new myobject("hello !");

console.log(newobj.get_status());

//hello !

這裡要特別注意:按照慣例,建構函式始終都應該以乙個大寫字母開頭,而非建構函式則應該以乙個小寫字母開頭。

var array=[3,4];
var statusobj=;

//status值為『hello』

function speciallarray()

return values;

}var color=new speciallarray("blue","yellow","red");

console.log(colo.topipedstring);

//"blue|yellow|red"

關於js中的array部分

什麼是陣列?陣列就是一組資料組合在一起,並且每個資料都可以單獨拿出來使用 建立陣列的三種方式 方法一var arr new array arr 0 n1 arr 1 n2 方法二var arr n1 n2 方法三var arr new array n1 n2 使用document.write arr...

關於js寫在head部分的問題

當我們將js寫在head部分時,我們要知道,html頁面的載入順序是從上到下的,如果我們寫的js 需要在文件載入完成後才能夠去執行 一般都是要到文件載入完才執行的 那麼我們放到內可能導致無法獲取物件的情況 為了避免類似情況的發生,可以使用以下方式 1 將指令碼 放在網頁的底端,執行指令碼 的時候,可...

《JS語言精粹》學習筆記 函式部分 閉包

要理解閉包,首先要理解變數作用域,變數的作用域就兩種,全域性變數和區域性變數,函式內部可以直接讀取全域性變數,函式外部無法讀取函式內部的區域性變數。閉包定義 能讀取函式內部區域性變數的函式就是閉包,而只有函式內部的子函式才能讀取區域性變數,所以本質上,閉包就是將函式內部和函式外部鏈結起來的一棟橋梁。...