ES5 ES6 作用域宣告部分

2022-08-21 13:06:08 字數 694 閱讀 8522

一旦引擎進入乙個作用域是,會先掃瞄該作用域內的定義語句

es5 

var foo = 1;

(function(){

console.log(foo) ;//undefined

var foo = 2

函式在載入的時候會立即執行,這時候在函式的作用域內,由於有宣告foo的語句,故在函式的作用域內foo的值為2,並且是在console.log(foo)之後宣告的,根據宣告前置,函式中可以等價於     

(function(){ 

var foo ;

console.log(foo) ;//undefined

foo = 2

故console.log(foo)列印出來的是undefined

當然,如果函式中不宣告foo的話,那麼函式中列印的foo就應該是全域性變數中的 foo, 也就是 1 

es6 

對於這種不是很符合程式設計邏輯的行為,es6 的let 和const 中,引擎將這種行為直接視為錯誤處理

let foo = 1;

(function(){

console.log(foo) ;//referenceerror: foo is not defined

let foo = 2

es6 標準中(一般情況下為嚴格模式)不允許變數(或者常量)在被定義之前被其他語句所讀取,以免出現邏輯性的錯誤。

es5 es6 繼承總結

一 原型鏈繼承 原型鏈繼承的原理 直接讓子類的原型物件指向父類例項,當子類例項找不到對應的屬性和方法時,就會往它的原型物件,也就是父類例項上找,從而實現對父類的屬性和方法的繼承。父類 function fat 父類上的原型方法 fat.prototype.getname function 子類 fu...

ES5 ES6 實現繼承

function parent value parent.prototype.getvalue function function child value child.prototype new parent const child new child 1 child.getvalue 1我們來研究...

ES5,ES6中的繼承

es5中的繼承 1,借助建構函式實現繼承 只能實現部分繼承 原理 通過call 函式改變this指向,將父類屬性掛載到子類例項中 function parent function child console.log new child 總結 優點 只呼叫一次父類的建構函式,避免了在子類原型中建立不必...