首頁 web前端 js教程 關於javascript變數聲明和定義變數var的不同理解和分析

關於javascript變數聲明和定義變數var的不同理解和分析

Jul 18, 2017 am 10:57 AM
javascript js 定義

下面看一個簡單的範例來說明問題

if (!("a" in window)) {
    var a = 1;
}
alert(a);
登入後複製

首先,所有的全域變數都是window的屬性,語句var a = 1;等價於window.a = 1;

你可以用以下方式來偵測全域變數是否宣告

"變數名稱" in window

第二,所有的變數宣告都在範圍作用域的頂部,看一下相似的範例:

複製程式碼 程式碼如下:

alert("a" in window);
var a;
登入後複製

此時,儘管宣告是在alert之後,alert彈出的依然是true,這是因為JavaScript引擎首先會掃墓所有的變數聲明,然後將這些變數聲明移到頂部,最終的程式碼效果是這樣的:

var a;
alert("a" in window);
登入後複製

第三,你需要理解該題目的意思是,變數宣告被提前了,但變數賦值沒有,因為這行程式碼包含了變數宣告和變數賦值。

你可以把語句拆分為如下程式碼:

var a;    //声明
a = 1;    //初始化赋值
登入後複製

所以總結起來就是當變數宣告和賦值在一起用的時候,JavaScript引擎會自動將它分成兩部以便將變數宣告提前,不將賦值的步驟提前是因為他有可能影響程式碼執行出不可預期的結果。

題目中的程式碼相當於:

var a;
if (!("a" in window)) {
    a = 1;
}
alert(a);
登入後複製

根據上述例題的分析,宣告變數時如果是宣告的局部變數前面一定要加var,如果宣告的是全域變量可以不加var(最好限制全域變數的個數,盡量使用局部變數)

下面講述一個使用var的幾個特性

使用var語句多次聲明一個變數不僅是合法的,而且也不會造成任何錯誤。
如果重複使用的一個宣告有一個初始值,那麼它擔當的不過是一個賦值語句的角色。
如果重複使用的一個宣告沒有一個初始值,那麼它不會對原來存在的變數有任何的影響。
沒有var宣告的變量,是作為全域變數存在的;有var宣告的變量,屬於局部變量,尤其是在函數內部。並且,經過測試,帶var聲明比不帶var速度要快。函數內盡量多設局部變量,這樣即安全又快速,變量操作也更加合理,不會因為函數內胡亂操作全局變量而導致邏輯錯誤。

宣告物件時最好使用物件自面量的方式,這樣的速度相對new的方式要快很多。

變數名是自己取的,為了照顧語意和規範,變數名可能稍長,但注意了,變數名的長度也會影響程式碼的執行速度。長的變數名宣告的執行速度沒有短的快。

題目如下,問題是:2次alert分別輸出什麼結果?

<script
type="text/javascript">
    var a = 1;
    var a;
    alert(typeof a);
(function () {
        b = &#39;-----&#39;;
        var b;        
    })();
    alert( typeof b);
</script>
登入後複製

在Chrome裡面運行了一下程式碼,程式碼正確結果是1.number 2.undefined。這裡考察的是JavaScript的變數宣告提前概念。

我們在看另一個例子,例如下面:

test();
function test(){    
alert("Hello World!");
}
登入後複製

程式不會報錯,而已運行結果是:Hello World!。原理:電腦在開始執行語句之前,會先尋找所有的function定義,然後儲存相關的function。
第1題:
var a = 1;
var a;
第2行宣告變數a,就相當於在頂部宣告了a,然後第一句重新宣告a,然後賦值為1。所以typeof a為number
第2題:
b = '-----'; 
var b; 
第二題解析:b='-----',程式首先會去找上下文是否有變數b的聲明,如果有的話,直接賦值為'-----'。但是alert( typeof b); 是在函數外面,輸出的全域變數b,所有是undefined。
請注意:對變數的賦值操作並沒有提前。

以上是關於javascript變數聲明和定義變數var的不同理解和分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1323
25
PHP教程
1272
29
C# 教程
1251
24
建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

什麼是Discuz? Discuz的定義與功能介紹 什麼是Discuz? Discuz的定義與功能介紹 Mar 03, 2024 am 10:33 AM

《探索Discuz:定義、功能及程式碼範例》隨著網路的快速發展,社群論壇已成為人們獲取資訊、交流觀點的重要平台。在眾多的社群論壇系統中,Discuz作為國內較知名的一種開源論壇軟體,備受廣大網站開發者和管理員的青睞。那麼,什麼是Discuz?它又有哪些功能,能為我們的網站提供怎樣的幫助呢?本文將對Discuz進行詳細介紹,並附上具體的程式碼範例,幫助讀者更

MySQL 複合主鍵的定義與作用 MySQL 複合主鍵的定義與作用 Mar 15, 2024 pm 05:18 PM

MySQL中的複合主鍵是指表中由多個欄位組合而成的主鍵,用來唯一標識每筆記錄。與單一主鍵不同的是,複合主鍵由多個欄位的值組合在一起形成。在建立表格的時候,可以透過指定多個欄位為主鍵來定義複合主鍵。為了示範複合主鍵的定義與作用,我們先建立一個名為users的表,其中包含了id、username和email這三個字段,其中id是自增主鍵,user

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

PHP介面簡介及其定義方式 PHP介面簡介及其定義方式 Mar 23, 2024 am 09:00 AM

PHP介面簡介及其定義方式PHP是一種廣泛應用於Web開發的開源腳本語言,具有靈活、簡單、強大等特性。在PHP中,介面(interface)是一種定義多個類別之間公共方法的工具,實現了多態性,讓程式碼更加靈活和可重複使用。本文將介紹PHP介面的概念及其定義方式,同時提供具體的程式碼範例展示其用法。 1.PHP介面概念介面在物件導向程式設計中扮演著重要的角色,定義了類別應

js和vue的關係 js和vue的關係 Mar 11, 2024 pm 05:21 PM

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

全角字符的定義及使用 全角字符的定義及使用 Mar 25, 2024 pm 03:33 PM

什麼是全角字元?在電腦編碼系統中,全角字元是一種佔用兩個標準字元位置的字元編碼方式。相對應的,佔用一個標準字元位置的字元編碼方式稱為半角字元。全角字元通常用於中文、日文、韓文等亞洲文字的輸入、顯示和列印。在中文輸入法和文字編輯中,全角字符與半角字符的使用場景是有所區別的。全角字符的使用中文輸入法:在中文輸入法中,通常全角字符用於輸入中文字符,例如漢字、標

See all articles