// 無參函數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);
2、函數中的arguments參數
function add(a,b){ console.log(a+b); console.log(arguments.length) } add(1,2) // 3 2 注意:函數只能返回一個值,若是要返回多個值,只能將其放在數組或對象中返回3、函數的全局變量和局部變量
#局部變量:在JavaScript函數內部聲明的變量(使用 var)是局部變量,因此只能在函數內部訪問它(該變量的做用域是函數內部)。只要函數運行完畢,局部變量就會被刪除。#全局變量:在函數外聲明的變量是全局變量,網頁上的全部腳本和函數都能訪問它。#變量生存週期:JavaScript變量的生命期從它們被聲明的時間開始。 局部變量會在函數運行之後被刪除。 全局變量會在頁面關閉後被刪除。4、做用域
首先在函數內部查找變量,找不到則到外層函數查找,逐步找到最外層。另外函數的做用域關係是在定義階段就固定死的,與調用位置無關javascript
//舉例,用法 跟python查找變量的順序一致var city = "BeiJing";function f() { var city = "ShangHai"; function inner(){ var city = "ShenZhen"; console.log(city); } inner(); } f(); //ShenZhenvar city = "BeiJing";function Bar() { console.log(city); }function f() { var city = "ShangHai"; return Bar; }var ret = f(); ret(); // BeiJingvar city = "BeiJing";function f(){ var city = "ShangHai"; function inner(){ console.log(city); } return inner; }var ret = f(); ret(); //ShangHai5、javascript中的變量提高和函數提高
一、在js中只有兩種做用域java
全局做用域、函數做用域python
ps:在ES6以前,js是沒有塊級做用域。數組
二、什麼是沒有塊級做用域?ide
三、什麼是變量提高?函數
在js中,代碼執行時分兩步走:一、解析 二、一步一步執行對象
那麼變量提高就是變量聲明會被提高到做用域的最頂上去,也就是該變量無論是在做用域的哪一個地方聲明的,都會提高到做做用域的最頂上去。blog
舉例分辨:ip
四、什麼是函數提高?ci
舉例1:
fn(); //此處能夠正常調用console.log(fn);function fn(){ console.log("哈哈哈哈") } fn(); //此處也能夠正常調用//輸出結果:哈哈哈哈 { console.log("哈哈哈哈") } 哈哈哈哈//注意:函數聲明式,會將函數的聲明和定義一塊兒提高到做用域的最頂上去。
舉例2:
函數表達式聲明的函數
console.log(fn); //undefinedvar 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:函數聲明的優先級高於變量申明的優先級,而且函數聲明和函數定義的部分一塊兒被提高。