函式的高階用法 一 關於閉包

2021-09-09 06:29:03 字數 1011 閱讀 1898

function create1(pro) 

}var c1 = create1("pro"); // 建立函式

c1;c1(1,2);

這種函式返回另乙個函式的,我們第一次呼叫只是構建了乙個外層函式體物件,

只有有後續的呼叫,才能呼叫內層函式體,並且重複呼叫,只會重複內層函式體。

閉包和tostring 用法(引數為類物件的引數。這時會自動呼叫類物件的轉化為字串的tostring方法)

// 宣告乙個函式表示式

var add = function(x)

// 構建乙個函式體的tostring()函式

tmp.tostring = function()

return tmp; // 返回的是乙個函式體,如果該函式體有tostring()方法,則會呼叫函式體的tostring()方法

}add(1)(2)(3); //5

add(10)(2)(3); //5

add(100)(2)(8); // 10

add(1)(2)(5);

function makeadder(addval)

}var add2=makeadder(2);

var a=add2(10)

console.log(a);

// => 12

var b=add2(90)

console.log(b);

// => 92

其實這裡運用了閉包的知識,我們都知道閉包會儲存外部函式的作用域鏈,可以捕獲外部函式的引數;

當我們返回乙個add2()函式的時候,這個函式會一直記住外部函式的addval的值

[缺點]:過度使用閉包,會造成記憶體洩漏,就像上面的add2()函式,會一直儲存著外部函式的作用域鏈,直到自己被銷毀

函式都有單獨的作用域和prototype屬性,如果要訪問屬性和函式裡的變數

外部是無法直接訪問的,必須先new 乙個例項出來

高階函式 閉包

f用於 的格式化,內是變數或函式的某個形參 s這種格式化不行 def func name 小明 print f good morning,func def func name print f good morning,func 小明 分割線 高階函式 引數為函式 閉包 返回值為函式 裝飾器 返回值為...

函式高階(閉包)

def outer func loc list def inner func name print s loc list s name,loc list return inner func clo func 0 outer func clo func 0 clo func 0 clo func 0 ...

關於閉包函式

閉包函式其實跟普通函式呼叫沒啥子很大的差異,只不過所謂閉包,就是把當前函式內部封閉對外留個介面呼叫 普通函式好像也差不多 基本用法 function test string echo b a test1 sdsdsd 就像不能訪問全域性變數一樣 b function a function test1...