ES5-JS學習

答:
在JS裏的全局環境就是一個對象,這個對象也是JS運行的根,對瀏覽器中的JS,這個對象就是window對象。對全局JS語句來說,window對象就相當於當前作用域。
當聲明對象時,加上var,則表示是window(或者父級對象)的一個變量,而不加var,則表示是window的一個屬性。對於全局的js語句來說,兩者沒太多區別,而在函數內,則有點不同:
變量是有作用域的(作用域外不可以調用),而屬性則可以在函數內外都可以改變(全局都可以調用)。
二、scoping是什麼?hoisting是什麼? var fn = function () {...} 和 function fn () {...} 有什麼不同?什麼時候使用哪種方式?
答:scoping是js語句的作用域,在js中,不存在塊級作用域,只有函數級作用域。hoisting是函數提升機制,在函數聲明時,分爲函數表達式和函數聲明表達式,只有函數聲明式能被提升,函數聲明式如:function fn(){}。函數表達式如:var fn=function(){}。當頁面加載時,會先編譯並執行聲明式函數,而表達式函數只會編譯,等調用的時候纔會執行。使用時,根據是否需要執行來判斷運用何種函數。

三、'use strict'產生的效果是什麼?
use strict是js的一種運行模式:嚴格模式。和正常模式不同,js語法更加嚴格、安全。具體特性如下:
1、禁止使用with語句,因爲with在編譯的時候無法確定屬性到底歸屬哪個對象。
2、正常模式下,eval語句的作用域,取決於它處於全局作用域,還是處於函數作用域。嚴格模式下,eval語句本身就是一個作用域,不再能夠生成全局變量了,它所生成的變量只能用於eval內部。
3、禁止this關鍵字指向全局對象
等等

四、this關鍵字詳解
1.this對象的涵義就是指向當前對象中的屬性和方法。
2.this指向的可變性。當在全局作用域時,this指向全局;當在某個對象中使用this時,this指向該對象;當把某個對象的方法賦值給另外一個對象時,this會指向後一個對象。
3.this的使用場合有:在全局環境中使用;在構造函數中使用,在對象的方法中使用。
4.this的使用注意點,最重要的一點就是要避免多層嵌套使用this對象。



五、bind(), call(), apply() 是什麼?什麼時候使用?解決什麼問題?
call/apply/bind方法的來源:這三個方法其實都是繼承自Function.prototype中的,屬於實例方法。
1 console.log(Function.prototype.hasOwnProperty('call')) //true2 console.log(Function.prototype.hasOwnProperty('apply')) //true3 console.log(Function.prototype.hasOwnProperty('bind')) //true
上面代碼中,都返回了true,表明三種方法都是繼承自Function.prototype的。當然,普通的對象,函數,數組都繼承了Function.prototype對象中的三個方法,所以這三個方法都可以在對象,數組,函數中使用。
bind()方法是將某個函數綁定到某個對象上,而call和apply方法則可以看作是某個對象上的方法,通過調用方法的形式來間接調用函數。如下例子:
var zlw = { name: "zlw", sayHello: function (age) { console.log("hello, i am ", this.name + " " + age " years old"); }};var xlj = { name: "xlj",};zlw.sayHello(24);
調用方式:
zlw.sayHello.call(xlj, 24);// hello, i am xlj 24 years oldzlw.sayHello.apply(xlj, [24]);// hello, i am xlj 24 years old
zlw.sayHello.bind(xlj)(24); //hello, i am xlj 24 years oldzlw.sayHello.bind(xlj)([24]); //hello, i am xlj 24 years old
bind方法還可以這樣寫 fn.bind(obj, arg1)(arg2) 。
bind() 方法和前兩者不同在於:bind() 方法會返回執行上下文被改變的函數而不會立即執行,而前兩者是直接執行該函數。他的參數和call()相同。
這三個方法的作用都是改變函數的執行上下文!通俗點就是說來切換/固定this的指向。


六、Array.prototype.reduce() 什麼時候使用?解決什麼問題?-
reduce(function(a,b){},initialValue)
第一個參數爲回調方法,第二個參數爲初始值。
回調函數也有兩個參數,第一個爲上一次回調函數返回的結果(第一次則爲初始值),第二個參數爲數組中的下一個值。
在沒有傳入初始值的時候,回調函數執行數組長度減一。
有傳入值,則執行數組長度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章