let,const 宣告的變數不會繫結給window物件 而var會
先來看一道題
let id = 2; let json = { id: 1, show:function(){ setTimeout(function(){ console.log(this.id); },2000) } } json.show();
假設沒有頭部的let id = 2; 那麼程式碼會輸出undefined表示id未定義
加上let id = 2;呢 結果還是顯示undefined。這是為什麼,不是什麼聲明瞭一個全域性變數let id = 2;了嗎
那麼這裡的this.id的this指的是window物件就有id值了呀??
其實不是的,
如果我們把let id = 2;換成var id = 2;那麼window物件就能呼叫id值了。
因為let const定義的變數由於作用域,並不會繫結到window上。
補充:
為什麼this指向window?
因為json.show();呼叫的時候,this先繫結到json身上,但是進入setTimeout這個函式裡後,並命有明確的指出誰呼叫的setTimeout
所以this由json失效繫結到預設的window物件上。
相關推薦
let,const 宣告的變數不會繫結給window物件 而var會
先來看一道題 let id = 2; let json = { id: 1, show:function(){ setTimeout(function(){ console.log(this.id); },2000)
將方法繫結到window物件,給app端呼叫
通過jsBridge方法,H5可以呼叫客戶端(ios,android)的內部方法,同樣,客戶端也需要能呼叫H5頁面裡定義的js方法,但是在vue裡,所有的方法都是在元件內部宣告的,也只能在元件內部呼叫,並沒有繫結window物件下面,這樣一來,vue元件裡定義的
javascript變數提升,ES6中var,let,const的區別
在ES6之前,我們都是用var關鍵字宣告變數。無論宣告在何處,都會被視為宣告在函式的最頂部(不在函式內即在全域性作用域的最頂部)。這就是函式變數提升例如: function aa() { if(flag) { var test = 'hello ma
標頭檔案中只能宣告變數不能定義變數 而宣告變數必須帶extern,為什麼標頭檔案中變數的宣告都沒有加
1.標頭檔案中不可以放變數的定義!一般標頭檔案中只是放變數的宣告,因為標頭檔案要被其他檔案包含#include,如果把定義放在標頭檔案的話,就不能避免多次定義變數。C++不允許多次定義變數,一個程式中對指定變數的定義只有一次,宣告可以無數次。 三個例外:1)值在編譯時
關於變量聲明的var,let,const
報錯 不存在 com 輸出 ges 操作 之前 alt 沒有 在js中,用var聲明的話,在同一個作用域的範圍內會存在聲明提前的情況,舉個例子: 按常理來說,我們此時需要的b應該輸出的是 not defined 才對,但是實際上並沒有,因為var
let和const----你所不知道的JavaScript系列
err 刪除 read AS 對象 ble 試題 都是 AR let 眾所周知,在ES6之前,聲明變量的關鍵字就只有var。var 聲明變量要麽是全局的,要麽是函數級的,而無法是塊級的。 var a=1; console.log(a); //1 console.log(
javascript每日進階--var和let,const,class的屬性區別
平常我們對於var和let,const,class的關注主要在他們的作用域的區別上,今天發現它們在屬性上也是有一些區別的。 var命令和function命令宣告的全域性變數,依舊是頂層物件的屬性,也就是還是window和global的屬性 let命令、const命令、c
var,let,const區別
let 和 const 是ES6中新增用來定義變數的。 var var語句用來宣告JavaScript變數,在學習JS入門最基礎瞭解的知識,也就是在ES5階段,所有變數的宣告都是用var。 var a=1; alert(a); let let同樣是用來定義變數。 let a=
vue的if-else判斷,注意宣告變數
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="https://cdn.jsdelivr.n
多個版本jdk,修改環境變數不生效
http://www.blogjava.net/brock/archive/2015/01/06/422073.aspx 多個jdk版本之間的切換不生效,操作: 在安裝JDK1.6時(本機先安裝jdk1.6再安裝的jdk1.5),自動將java.exe、javaw.ex
前端面試題(二):ES6中let,const和 var 三者的區別
let命令基本用法 在ES6中,新增了let命令,用於宣告變數,用來取代ES5中var命令,消除var宣告的變數的不合理,不嚴謹之處。const用於宣告常量。 讓我們來看看let和var的區別 1.let不存在變數提升 使用let宣告的變數,不會像
ES6中var,let,const區別
今天第一次遇到const定義的變數,查閱了相關資料整理了這篇文章。主要內容是:js中三種定義變數的方式const, var, let的區別。 1.const定義的變數不可以修改,而且必須初始化。 1 const b = 2;//正確 2 // const b;//
一個電腦上同時安裝多個版本JDK,設定環境變數不生效的解決方法
window下在同一臺機器上安裝多個版本jdk,修改環境變數不生效問題 現象:某臺Windows機器,先安裝了JDK1.7,然後配置了JAVA_HOME等環
在同一臺機器上安裝多個版本jdk,修改環境變數不生效
本機已經安裝了jdk1.6,而比較早期的專案需要依賴jdk1.5,於是同時在本機安裝了jdk1.5和jdk1.6. 安裝jdk1.5前,執行java -version得到 java version "1.6.0_38" Java(TM) SE Runtime
var ,let ,const 的區別和共同點
一、let和var區別 1.關於變數提升,var能變數提升,let不能 // 關於var 如下所示 console.log(
現代JavaScript—ES6+中的Imports,Exports,Let,Const和Promise
轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。原文出處:https://www.freecodecamp.org/news/learn-modern-javascript/ 在過去幾年裡,JavaScript有很多的更新。如果你想提升寫程式碼的
使用idea的時候遇到的n個問題:第一個是關於註冊過期,怎麼才可以永久使用,第二個是關於maven繫結到idea,第三個。。。。第n個。。
關於idea的n個問題,我也是網上到處找,然後發現下邊部落格幫我解決了相關問題: 問題一:一個是關於註冊過期,怎麼才可以永久使用 https://blog.csdn.net/f317363184/article/details/78808925?utm_source=blogxgwz4
MyBatis不能繫結xml:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
臨睡前解決了一個問題: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 檢查以下配置: 1:檢查xml檔案所在的package名稱是否和interface對應的packa
c++繼承和組合,多型,虛擬函式(c++後期繫結的本質)
組合和繼承,實現了程式碼的可擴充套件性和相容性。 多型是在虛擬函式上得到了支援。 多型的原理,函式的呼叫繫結: 把函式的呼叫和函式體相關聯稱為捆綁。當捆綁是在程式執行之前完成的,稱為早期捆綁。c語言只支援早期繫結。晚期捆綁,物件通過自身得到類的資訊,然後找
你必須知道的React的知識點:單向資料流,高效能虛擬DOM,元件間的資料互動,事件與資料的雙向繫結,生命週期鉤子,fetch:資料請求等
1、React除錯工具:React Developer Tools 2、React開發工具:Atom 3、React UI庫:Material-UI / Ant Deaign 4、React適用場景:資料不斷變化的大型應用程式 5、前端UI構建方式:資料模型、UI介面