js函數的使用

函數聲明的三種方式

var fun = new Function("return 1+2");
console.log(fun()); // 輸出3

// 第二種方式 (函數聲明)
function fun2() {
    return 2 + 3;
}
console.log(fun2());// 輸出5

// 第三種函數 (表達式方式聲明函數)
var fun3 = function(){
    return 4 + 5;
}
console.log(fun3()); // 輸出9

函數的實參

函數的實參可以是任意值, 如基本數據類型, 引用數據類型, 或者函數

// 傳遞函數參數例子
var calc = function(r) {
	return 3.14 * r;
}

function test(fun, r) {
	return fun(r);
}
var result = test(calc, 10);
console.log(result); // 輸出31.400000002

立即執行函數

函數定義完直接執行的函數, 只能執行一次

// 用括號包裹一個的匿名函數就定義了一個函數, 在括號外面在加一對括號就會立刻執行
(function(){
    console.log("這是立即執行函數");
})();
// 執行結果: 輸出這是立刻執行函數

// 立即執行函數可以有參數
(function(a,b) {
    console.log(a + b);
})(1,5);
// 函數執行結果: 輸出6

函數作用域

  • 函數作用域在調用函數時創建, 在函數結束時銷燬
  • 每次調用函數都會創建一個作用域, 且作用域相互獨立
  • 函數作用域可以訪問全局作用域, 全局作用域不能訪問函數作用域
  • 在函數作用域中訪問變量, 首先從自身函數作用域中查找, 查找不到,就逐級向上查找

demo

// demo
var x = "我是全局作用域的x";
function fun1() {
	var x = "我是一級作用域的x";
	function fun2() {
    	var x = "我是二級作用域的x";
		console.log(x);
	}
	fun2();
}
fun1();

運行結果: 打印我是二級作用域的x

如果註釋第六行, 則會打印我是一級作用域的x

如果註釋掉第六行和第四行, 則會打印我是全局作用域的x

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章