首頁 web前端 js教程 JavaScript中變數宣告有var和沒var的區別範例介紹_javascript技巧

JavaScript中變數宣告有var和沒var的區別範例介紹_javascript技巧

May 16, 2016 pm 04:36 PM
var 變數聲明

本文來論述JavaScript中變數宣告有var和沒var的區別,關於Js中的變數宣告的作用域是以函數為單位,所以我們常常見到避免全域變數污染的方法是

(function(){ 
// ... 
})();
登入後複製

在函數內部,有var和沒var宣告的變數是不一樣的。有var聲明的是局部變量,沒var的,聲明的全域變量,所以可以藉此向外暴露介面東東。
在全域作用域內宣告變數時,有var 和沒var看起來都一樣,我們知道,聲明的全域變量,就是window的屬性,究竟是否一樣,我們透過ECMAScrpit5提供的屬性的特性查詢方法,來發現之間的區別。

var fff = 2; 
window.ffa = 3; 
ffb = 4; 
this.ffc = 4; 
var ffftx = Object.getOwnPropertyDescriptor(window, 'fff'); //configurable:false,enumerable:true,value:2,writable:true 
var ffatx = Object.getOwnPropertyDescriptor(window, 'ffa'); //configurable:true,enumerable:true,value:2,writable:true 
var ffbtx = Object.getOwnPropertyDescriptor(window, 'ffb'); //configurable:true,enumerable:true,value:2,writable:true 
var ffctx = Object.getOwnPropertyDescriptor(window, 'ffc'); //configurable:true,enumerable:true,value:2,writable:true
登入後複製

透過上面,發現,原來還是有差別的,我們再用delete刪除屬性來驗證下,配置性為false的屬性無法刪除。也就是透過變數var宣告全域物件的屬性無法刪除,我們也會發現和函數宣告所建立的全域物件屬性也無法刪​​除。

delete fff; // 无法删除 
delete ffa; // 可删除 
delete ffb; // 可删除 
delete ffc; // 可删除
登入後複製

結論就是,加上var 和沒加 var的宣告全域變數是有區別的。

使用var語句重複聲明語句是合法且無害的。如果重複聲明且帶有賦值,那麼就和一般的賦值語句沒差別。如果嘗試讀取沒有聲明過的變量,Js會報錯。
JavaScript的函數作用域內,宣告的變數或內部函數,在函數體內都是可見的。意味著,函數在定義之前可能已經可用。函數定義有兩種方式,一種是函數定義表達式,一種是函數宣告語句。

// 函数定义表达式 
var fns = function (){ 
// ... 
}; 
// 函数声明语句 
function fns(){ 
// ... 
} 
登入後複製

函數宣告語句「被提前」到外部腳本或外部函數作用域的頂部,所以以這種方式宣告的函數,可以被再它定義之前出現的程式碼所呼叫。而函數定義表達式中,變數的宣告被提前了,但是給變數的賦值是不會提前的,所以,以表達式定義的函數在函數定義之前無法呼叫。

(function() { 
testa(); // 打印出testa 
testb(); // 报错:提示undefined is not a function 
console.log(testc); //undefined,如果移到上面就可以了 
function testa() { 
console.log("testa"); 
} 
var testb = function() { 
console.log("tesb"); 
} 
var testc = "testc"; 
})();
登入後複製

當然,我們宣告變數和函數,必須遵守基本的規範,變數和函數宣告要提前。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

解決C++程式碼中出現的「error: use of undeclared identifier 'variable'」問題 解決C++程式碼中出現的「error: use of undeclared identifier 'variable'」問題 Aug 26, 2023 pm 01:46 PM

解決C++程式碼中出現的「error:useofundeclaredidentifier'variable'」問題在使用C++進行程式設計時,我們常常會遇到各種各樣的錯誤。其中一個常見的錯誤是「error:useofundeclaredidentifier'variable'」。這個錯誤通常意味著我們在程式碼中使用了一個未宣告的變數。這篇文章將詳

一起聊聊var、let以及const的差異(程式碼範例) 一起聊聊var、let以及const的差異(程式碼範例) Jan 06, 2023 pm 04:25 PM

這篇文章為大家帶來了關於JavaScript的相關知識,其中主要為大家介紹了var、let以及const的區別有哪些,還有ECMAScript 和JavaScript的關係介紹,有興趣的朋友一起來看一下吧,希望對大家有幫助。

在 Windows 11 上修復音訊服務無回應問題的 18 種方法 在 Windows 11 上修復音訊服務無回應問題的 18 種方法 Jun 05, 2023 pm 10:23 PM

音訊輸出和輸入需要特定的驅動程式和服務才能在Windows11上按預期工作。這些有時最終會在後台遇到錯誤,從而導致音訊問題,如無音訊輸出、缺少音訊設備、音訊失真等。如何修復在Windows11上沒有回應的音訊服務我們建議您從下面提到的修復開始,並逐步完成列表,直到您設法解決您的問題。由於Windows11上的多種原因,音訊服務可能無法回應。此清單將幫助您驗證和修復阻止音訊服務在Windows11上回應的大多數問題。請按照以下相關部分幫助您完成流程。方法一:重啟音訊服務您可能會遇

PHP中var關鍵字的作用與範例 PHP中var關鍵字的作用與範例 Jun 28, 2023 pm 08:58 PM

PHP中var關鍵字的作用和範例在PHP中,var關鍵字用來聲明一個變數。在先前的PHP版本中,使用var關鍵字是宣告成員變數的慣用方式,現在不再建議使用。然而,在某些情況下,var關鍵字依然會被使用。 var關鍵字主要用於宣告一個局部變量,並且會自動將該變數標記為局部作用域。這意味著該變數僅在當前的程式碼區塊中可見,並且不能在其他函數或程式碼區塊中存取。使用var

如何在PHP中使用變數 如何在PHP中使用變數 May 20, 2023 pm 02:33 PM

PHP是一種非常流行的網頁開發語言,它允許開發人員在伺服器端創建動態Web應用程式。在PHP中,變數是一種基本的資料結構,用於儲存值和資料。本文將介紹如何在PHP中使用變數。變數的基本語法在PHP中宣告變數的語法非常簡單。變數名以美元符號($)開頭,後面跟著變數名。變數名稱可以是字母、數字或底線的組合,但必須以字母或底線開頭。例如,下面的程式碼聲明了一個名

報錯AttributeError(\'{0!r} object has no attribute {1!r}\'.format(type(self).__name__, k))的解決 報錯AttributeError(\'{0!r} object has no attribute {1!r}\'.format(type(self).__name__, k))的解決 Feb 29, 2024 pm 06:40 PM

錯誤的原因這個錯誤訊息表明,在python程式碼中,使用了一個物件(由self變數表示),但是該物件沒有一個名為k的屬性。這可能是由於該物件沒有定義這個屬性,或者是在程式碼中類型錯誤導致該物件不是預期的類型。如何解決要解決這個錯誤,可能需要進行以下操作之一或多個:檢查程式碼中的錯誤,確保self變數引用的物件具有名為k的屬性。檢查程式碼中的型別錯誤,確保self變數所引用的物件是預期的型別。如果是缺少屬性的話,需要在類別裡定義這個屬性使用tryexcept來取得這個錯誤如果確定了k是類別裡沒有定義的屬性,請確

let var const代表什麼意義 let var const代表什麼意義 Nov 14, 2023 pm 03:00 PM

llet、var、const分別代表區塊作用域變數、函數作用域變數和常數。詳細介紹:1、let,用於聲明一個塊作用域的變量,使用let聲明的變量不能在它被聲明之前被訪問,這就是所謂的暫時性死區;2、var,用來聲明變量的關鍵字,宣告的變數是函數作用域或全域作用域的,不受區塊級作用域的限制;3、const,用來宣告一個常數,一旦被賦值就不能再重新賦值的變量,值在宣告後不能被修改等。

如何解決golang報錯:undeclared name 'x' (cannot refer to unexported name),解決步驟 如何解決golang報錯:undeclared name 'x' (cannot refer to unexported name),解決步驟 Aug 19, 2023 am 11:01 AM

如何解決golang報錯:undeclaredname'x'(cannotrefertounexportedname),解決步驟在使用Golang進行開發過程中,我們經常會遇到各種各樣的報錯資訊。其中一個常見的錯誤是"undeclaredname'x'(cannotrefertounexportedname)"指的是變

See all articles