一、函數(shù)的定義與調(diào)用(與python類(lèi)同)// 無(wú)參函數(shù) function f1() { console.log("Hello world!"); }; f1(); // 有參數(shù)函數(shù) function f2(a, b) { console.log(arguments); // 內(nèi)置的arguments對(duì)象 console.log(arguments.length); console.log(arguments[0],arguments[1]); console.log(a, b); }; f2(10,20); // 帶返回值的函數(shù) function sum(a, b){ return a + b; } sum(1, 2); // 調(diào)用函數(shù) // 匿名函數(shù) var sum = function(a, b){ return a + b; } sum(1, 2); // 立即執(zhí)行函數(shù) (function(a, b){ return a + b; })(1, 2);
二、函數(shù)中的arguments參數(shù)function add(a,b){ console.log(a+b); console.log(arguments.length) } add(1,2) // 3 2 注意:函數(shù)只能返回一個(gè)值,如果要返回多個(gè)值,只能將其放在數(shù)組或?qū)ο笾蟹祷?/span> 三、函數(shù)的全局變量和局部變量#局部變量: 在JavaScript函數(shù)內(nèi)部聲明的變量(使用 var)是局部變量,所以只能在函數(shù)內(nèi)部訪問(wèn)它(該變量的作用域是函數(shù)內(nèi)部)。只要函數(shù)運(yùn)行完畢,局部變量就會(huì)被刪除。 #全局變量: 在函數(shù)外聲明的變量是全局變量,網(wǎng)頁(yè)上的所有腳本和函數(shù)都能訪問(wèn)它。 #變量生存周期: JavaScript變量的生命期從它們被聲明的時(shí)間開(kāi)始。 局部變量會(huì)在函數(shù)運(yùn)行以后被刪除。 全局變量會(huì)在頁(yè)面關(guān)閉后被刪除。 四、作用域首先在函數(shù)內(nèi)部查找變量,找不到則到外層函數(shù)查找,逐步找到最外層。另外函數(shù)的作用域關(guān)系是在定義階段就固定死的,與調(diào)用位置無(wú)關(guān) //舉例,用法 跟python查找變量的順序一致 var city = "BeiJing"; function f() { var city = "ShangHai"; function inner(){ var city = "ShenZhen"; console.log(city); } inner(); } f(); //ShenZhen var city = "BeiJing"; function Bar() { console.log(city); } function f() { var city = "ShangHai"; return Bar; } var ret = f(); ret(); // BeiJing var city = "BeiJing"; function f(){ var city = "ShangHai"; function inner(){ console.log(city); } return inner; } var ret = f(); ret(); //ShangHai 五、javascript中的變量提升和函數(shù)提升1、在js中只有兩種作用域 全局作用域、函數(shù)作用域 ps:在ES6之前,js是沒(méi)有塊級(jí)作用域。 2、什么是沒(méi)有塊級(jí)作用域?
3、什么是變量提升? 在js中,代碼執(zhí)行時(shí)分兩步走:1、解析 2、一步一步執(zhí)行 那么變量提升就是變量聲明會(huì)被提升到作用域的最頂上去,也就是該變量不管是在作用域的哪個(gè)地方聲明的,都會(huì)提升到作作用域的最頂上去。 舉例分辨:
4、什么是函數(shù)提升? 舉例1: fn(); //此處可以正常調(diào)用 console.log(fn); function fn(){ console.log("哈哈哈哈") } fn(); //此處也可以正常調(diào)用 //輸出結(jié)果: 哈哈哈哈 { console.log("哈哈哈哈") } 哈哈哈哈 //注意:函數(shù)聲明式,會(huì)將函數(shù)的聲明和定義一起提升到作用域的最頂上去。 舉例2: 函數(shù)表達(dá)式聲明的函數(shù) console.log(fn); //undefined var fn=function (){ console.log("舉例2") }; console.log(fn); //輸出結(jié)果: ? (){ console.log("舉例2") } 舉例3: 如果函數(shù)聲明和變量聲明使用的是同一個(gè)變量名稱(chēng),函數(shù)聲明的優(yōu)先級(jí)高于變量聲明的優(yōu)先級(jí) console.log(fn); function fn(){"舉例3"}; var fn="hello"; console.log(fn); //輸出結(jié)果: ? fn(){"舉例3"} hello 總結(jié): #1:所有的聲明都會(huì)提升到作用域的最頂上去。 #2:同一個(gè)變量只會(huì)聲明一次,其他的會(huì)被忽略掉。 #3:函數(shù)聲明的優(yōu)先級(jí)高于變量申明的優(yōu)先級(jí),并且函數(shù)聲明和函數(shù)定義的部分一起被提升。
|
|
|
來(lái)自: Coder編程 > 《待分類(lèi)》