函數(shù)

函數(shù)只是一個可以執(zhí)行的值

比如,可以把函數(shù)賦值給變量和對象的屬性,也可以當(dāng)作參數(shù)傳入其他函數(shù),或者作為函數(shù)的結(jié)果返回

length屬性

返回定義函數(shù)時,參數(shù)的個數(shù)

function fn(a,b,c){}
fn.length //3

作用域

Javascript只有兩種作用域:一種是全局作用域,另一種是函數(shù)作用域

1.函數(shù)外部聲明的變量就是全局變量(global variable),變量可以在函數(shù)外部讀取,也可以在函數(shù)內(nèi)部讀取
2.在函數(shù)內(nèi)部聲明的變量,變量只在函數(shù)內(nèi)部存在。外部無法讀取,稱為“局部變量”(localvariable)。
3.函數(shù)內(nèi)部定義的變量,會在該作用域內(nèi)覆蓋同名全局變量。
4.如果函數(shù)是在全局作用域聲明的,執(zhí)行時只取全局變量的值,不會取局部變量的值。如果是在局部作用域聲明的,執(zhí)行時優(yōu)先取聲明時局部作用域的值

參數(shù)

1.length屬性返回定義函數(shù)時,參數(shù)的個數(shù)
2.arguments對象包含了函數(shù)運行時的所有參數(shù),該對象可以讀寫參數(shù)值
3.函數(shù)參數(shù)如果是原始類型的值(數(shù)值、字符串、布爾值),傳遞方式是傳值傳遞(passes by value)。這意味著,在函數(shù)體內(nèi)修改參數(shù)值,不會影響到函數(shù)外部。
4.但是,如果函數(shù)參數(shù)是復(fù)合類型的值(數(shù)組、對象、其他函數(shù)),傳遞方式是傳址傳遞(pass by reference)。也就是說,傳入函數(shù)的原始值的地址,因此在函數(shù)內(nèi)部修改參數(shù),將會影響到原始值。

var p = 2;
function f(p) {
  p = 3;
}
f(p);
console.log(p) // 2
以上可以這么看:

// 相當(dāng)于函數(shù)內(nèi)部執(zhí)行:
var p= arguments[0]//2,
p=3
所以函數(shù)內(nèi)部的p改變,不會影響函數(shù)外部的p

閉包

閉包的用處
1.可以讀取函數(shù)內(nèi)部的變量
2.讓這些變量始終保持在內(nèi)存中,即閉包可以使得它誕生環(huán)境一直存在。
3.封裝對象的私有屬性和私有方法
4.閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁。

function Person(name) {
  var _age;
  function setAge(n) {
    _age = n;
  }
  function getAge() {
    return _age;
  }

  return {
    name: name,
    getAge: getAge,
    setAge: setAge
  };
}

var p1 = Person('張三');
p1.setAge(25);
p1.getAge() // 25

立即執(zhí)行函數(shù)

(function(a){
  console.log(a)
}(100)); 
// 100
可以看作同下面一樣:
function fn(a){
  console.log(a)
}        //先聲明
fn(100)  //再調(diào)用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容