函數的作用域&類型檢測

		/*
		 * 變量的作用域:
		 * 局部變量:定義在函數體內或者代碼塊的內部,參數是局部變量
		 * 全局變量:定義在最外的函數體爲,在代碼的任何地方都可以訪問的到,
		 * 沒有帶關鍵字var的也是全局變量
		 * 訪問規則:子函數可以訪問父函數的變量,父函數不可以訪問子函數的變量
		 */
		
		//在函數體內聲明的變量,在函數體外的沒法訪問的,這個變量的作用域就只是在這個函數體內
		
		//兩個不同的函數體內,同名的變量是互相獨立,互不影響的
		
		//內部函數可以訪問外部函數的變量,但是外部函數沒有辦法訪問內部函數的變量
		
		/*
		 * 如果在嵌套函數中,出現變量名重名的情況,js的函數在查找變量的時候,由內向外去查找
		 * 如果重名,內部函數的變量將屏蔽外部函數的變量
		 */

		/*
		 * 函數類型的檢測
		 * typeof 和 instanceof
		 * typeof 返回類 類型爲function類型,就是函數
		 * instanceof:識別正在處理的對象的類型,是類型檢測,返回true,不是返回false
		 */
		var fun = function(){}
		var obj = {};
		var arr = [];
		var n_null = null;
		console.log(typeof fun);//functions
		console.log(typeof obj);//object
		console.log(typeof arr);//object
		console.log(typeof n_null);//object
		
		/*
		 * typeof可以檢測除了null以外的所有基本數據類型,可以檢測function,
		 * 數據,對象,null返回的都是object
		 */
		
		console.log(fun instanceof Function);//true
		console.log(obj instanceof Object);//true
		console.log(arr instanceof Array);//true
		console.log(n_null instanceof Object);//
		
		/*
		 * typeof和instanceof的區別:
		 * typeof是用來判斷參數是什麼類型的,返回值是用來說明參數類型的字符串
		 * 返回值的結果可以是"number","string","boolean","undefined","object","function"
		 * 其中引用數據類型(對象和數組)和null類型,返回的都是object,所以使用typeof來判斷參數的類型有侷限性
		 * 
		 * instanceof是用來判斷一個對象在其原型鏈中是否存在一個構造函數的prototype屬性。
		 * a instanceof b 就是判斷a是否爲b的實例,是返回true,不是返回false
		 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章