一、函式的定義與呼叫(與python類同)
// 無參函式 function f1() { console.log("Hello world!"); }; f1(); // 有引數函式 function f2(a, b) { console.log(arguments); // 內置的arguments物件 console.log(arguments.length); console.log(arguments[0],arguments[1]); console.log(a, b); }; f2(10,20); // 帶回傳值的函式 function sum(a, b){ return a + b; } sum(1, 2); // 呼叫函式 // 匿名函式 var sum = function(a, b){ return a + b; } sum(1, 2); // 立即執行函式 (function(a, b){ return a + b; })(1, 2);
二、函式中的arguments引數
function add(a,b){ console.log(a+b); console.log(arguments.length) } add(1,2) // 3 2 注意:函式只能回傳一個值,如果要回傳多個值,只能將其放在陣列或物件中回傳
三、函式的全域變數和區域變數
#區域變數: 在JavaScript函式內部宣告的變數(使用 var)是區域變數,所以只能在函式內部訪問它(該變數的作用域是函式內部),只要函式運行完畢,區域變數就會被洗掉, #全域變數: 在函式外宣告的變數是全域變數,網頁上的所有腳本和函式都能訪問它, #變數生存周期: JavaScript變數的生命期從它們被宣告的時間開始, 區域變數會在函式運行以后被洗掉, 全域變數會在頁面關閉后被洗掉,
四、作用域
首先在函式內部查找變數,找不到則到外層函式查找,逐步找到最外層,另外函式的作用域關系是在定義階段就固定死的,與呼叫位置無關
//舉例,用法 跟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中的變數提升和函式提升
1、在js中只有兩種作用域
全域作用域、函式作用域
ps:在ES6之前,js是沒有塊級作用域,
2、什么是沒有塊級作用域?

3、什么是變數提升?
在js中,代碼執行時分兩步走:1、決議 2、一步一步執行
那么變數提升就是變數宣告會被提升到作用域的最頂上去,也就是該變數不管是在作用域的哪個地方宣告的,都會提升到作作用域的最頂上去,

舉例分辨:

4、什么是函式提升?
舉例1:
fn(); //此處可以正常呼叫 console.log(fn); function fn(){ console.log("哈哈哈哈") } fn(); //此處也可以正常呼叫 //輸出結果: 哈哈哈哈 { console.log("哈哈哈哈") } 哈哈哈哈 //注意:函式宣告式,會將函式的宣告和定義一起提升到作用域的最頂上去,
舉例2:
函式運算式宣告的函式
console.log(fn); //undefined var fn=function (){ console.log("舉例2") }; console.log(fn); //輸出結果: ? (){ console.log("舉例2") }
舉例3:
如果函式宣告和變數宣告使用的是同一個變數名稱,函式宣告的優先級高于變數宣告的優先級
console.log(fn); function fn(){"舉例3"}; var fn="hello"; console.log(fn); //輸出結果: ? fn(){"舉例3"} hello
總結:
#1:所有的宣告都會提升到作用域的最頂上去, #2:同一個變數只會宣告一次,其他的會被忽略掉, #3:函式宣告的優先級高于變數申明的優先級,并且函式宣告和函式定義的部分一起被提升,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/106538.html
標籤:其他
上一篇:JS——運算子,流程控制
下一篇:CSS實作迷你鍵盤
