js中 區域性變數、全域性變數、閉包
一、區域性變數
什麼是區域性變數呢,我們先通過下面的程式碼瞭解一下
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function aa(){
var a=88;
//區域性變數,只在aa()函式體裡面起作用。
}
function bb(){
alert(a);
}
bb();
</script>
</head>
<body>
</body>
</html>
現在有兩個函式aa(),bb();我現在呼叫函式bb()想讓他彈出a的值。結果什麼都沒有。
這不是程式的問題,而實際是作用域的問題。
現在a;只在函式aa()中有作用,那麼這個a就是區域性變數。
那麼如果函式bb()也要彈出a的值得話就得
function bb(){
var a=88;
alert(a);
}
這樣函式bb()也能彈出a的值88了, 不過現在的a和上面函式裡面的是不一樣的。
二、全域性變數
那麼有區域性變數肯定是有全域性變數的。
所謂的全域性變數,就是說他的作用域更大,比如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" >
var a=1314;
function aa(){
alert(a);
}
function bb(){
alert(a);
}
bb();
</script>
</head>
<body>
</body>
</html>
現在的話a的值在外面,下面的函式aa(),bb()呼叫的時候都能彈出a的值。這個就就做全域性變數。
但是這個很少用,儘量別用。就比如還是上面的函式但是多加個
var a=1314;
function aa(){
var a=520;
alert(a);
}
這個時候在呼叫函式aa()的時候彈出的就是他內部的520,而不是外部的1314了,所以說在實際應用中很容易重名,這樣就會有影響。當然瞭如果只用一個名字,的時候也是可以用了。
三、閉包
閉包可以理解為子函式使用父函式 的全域性變數。
這個在實際應用中是經常用到的,我就舉個例子說明吧
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#box{width: 200px;height: 200px;background: red;}
</style>
<script type="text/javascript">
window.onload=function(){
//父函式
var oBox=document.getElementById("box");
oBox.onmouseover=function(){
//子函式
oBox.style.background='blueviolet';
//oBox 是在外面函式中宣告的,但是在這個函式中可以使用
}
oBox.onmouseout=function(){
oBox.style.background='red';
}
}
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>
當函式裡面有函式,我們就能把外面的函式就是父函式,裡面的函式就是子函式。
當我想改變這個box的背景色,首先要在函式中找到這個box,只在父函式中宣告,但是在子函式中我們仍然可以呼叫。這就是閉包,(子函式使用父函式的全域性變數);
相關推薦
JS中最經典的全域性變數和區域性變數問題(1、作用域和作用域鏈 2、變數宣告提前)
var a = 10; function test(){ a = 100; console.log(a); console.log(this.a); var a; console.log(a); } test(); 1、程式的執行結果為:100
js中 區域性變數、全域性變數、閉包
一、區域性變數 什麼是區域性變數呢,我們先通過下面的程式碼瞭解一下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8">
對js中區域性變數、全域性變數和閉包的理解
對js中區域性變數、全域性變數和閉包的理解 區域性變數 對於區域性變數,js給出的定義是這樣的:在 JavaScript函式內部宣告的變數(使用 var)是區域性變數,所以只能在函式內部訪問它。(該變數的作用域是區域性的)。可以在不同的函式中使用名稱相同的區域性變數,因為只有宣告過該變數的函式才能識別出該變數
Java中成員變數、區域性變數、全域性變數、靜態變數存在位置及初始化
根據定義變數位置的不同,可以將變數分為成員變數和區域性變數。 成員變數是 定義在一個類的變數:類中方法外 區域性變數是定義在一個方法內的變數:方法中 成員變數分為: 靜態屬性:隨類的存在而存在,是在類載入的初始化 非靜態屬性:隨例項的屬性存在而存在。 區域性變數: 區域性變數不能加s
例項解析JS區域性變數與形參之間衝突、全域性變數的引用造成的慘案例項分析?
1.JS區域性變數與形參之間的衝突 (1).區域性變數慘案例項: 首先建立一個全域性陣列變數arrayList; var arrayList= [ {tel:1234657,name:'a'}, {tel:1234658,name:'b
c語言中靜態全域性變數、靜態區域性變數、全域性變數、區域性變數、巨集
全域性變數: 全域性變數具有全域性作用域。,它只編譯期被始化一次,它不能用變數來初始化。全域性變數只需要在一個原始檔中定義,就可以作用於所有的原始檔。在其他不包含全域性變數定義的原始檔中需要用extern關鍵詞來再次宣告這個全域性變數 區域性變數: 區域性變數只有區域性
區域性變數、 全域性變數、 堆、 堆疊、 靜態和全域性
一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分 (1)棧區(stack)— 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。 (2)堆區(heap) — 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由OS回收。 (3)全域性區(靜態區)(static
157_static作用再溫習(修飾函式、區域性變數、全域性變數)
下面是中興通訊2012校招筆試題的一道問答題: 1. static全域性變數與普通的全域性變數有什麼區別 ? 全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。 全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 這兩者在
js中給正則傳參、傳遞變數
js中驗證字串有時需要用到正則表示式,一般情況下直接寫正則進行驗證就行。 但是遇到需要把部分正則作為引數傳遞就麻煩一點,需要用到RegExp()物件。 <script type="text/javascript"> window.onload = function () {
1.成員變數&全域性變數&區域性變數&靜態變數、常量和方法
原文:https://blog.csdn.net/panpuqin/article/details/75091468 原文:https://blog.csdn.net/bobo_993/article/details/73655765 @interface
C++區域性變數、全域性變數的作用域及範圍&動態記憶體管理
本文主要介紹C++中的區域性變數、全域性變數、以及動態記憶體管理的變數。本文不涉及靜態變數static,所以描述的觀點不包括static變數。 區域性變數和全域性變數 區域性變數一般指函式內部的區域性變數,這部分的變數儲存在棧裡面,當函式呼叫結束,這些區域性變數就會
Python新手坑 | lambda、全域性變數與區域性變數、作用域、柯里化
從一個看似簡單的問題引入 首先我們來看這樣一個例子,假設你正試圖編寫一個函式,呼叫時可以返回0~4的平方,你選擇用for loop 和 lambda 來實現: squares = [] for x in range(5): squares.append
static的作用(修飾函式、區域性變數、全域性變數)
如有侵權,請聯絡。 在C語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。 先來介紹它的第一條也是最重要的一條:隱藏 當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編
[Python學習] 專題六.區域性變數、全域性變數global、匯入模組變數
定義在函式內的變數有區域性作用域,在一個模組中最高級別的變數有全域性作用域。本文主要講述全域性變數、區域性變數和匯入模組變數的方法。 參考:《Python核心程式設計
python基礎之四種函式型別、函式的巢狀呼叫、函式的區域性變數和全域性變數
函式根據有沒有引數,有沒有返回值,可以相互組合,一共有4種 * 無引數,無返回值 * 無引數,有返回值 * 有引數,無返回值 * 有引數,有返回值 <1>無引數,無返回值的函式此類函式,不能接收引數,也沒有返回值,一般情況下,列印提示燈類似的功能,使用這類的函式 def pr
簡述static關鍵字的作用?(備註:在什麼條件下使用static修飾區域性變數、全域性變數、函式)
static關鍵字至少有下列n個作用: (1)設定變數的儲存域,函式體內static變數的作用範圍為該函式體,不同於auto變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值; (
python基礎:函式名稱空間、作用域、全域性變數和區域性變數
一、名稱空間: Python的名稱空間的本質是一個字典,用來記錄變數名稱和值。字典的key是變數的名稱,字典的value對於的是變數的值。 例如 {‘name’:’zs’,’age’:10} 名稱空間一共分為三種:區域性名稱空間、全域性名稱空間、內建名稱空間 區域性名稱空間: 每個函式都有自
JavaScript區域性變數、全域性變數、閉包
1、關於變數,個人通俗的理解:變數在JavaScript中,是一種容器,用於儲存臨時資料. <詳情請看 javaScript資料型別 變數命名規範> 程式碼如下: <script type="text/javascript">
Java之成員變數、全域性變數、區域性變數的區別
儲存區域: 全域性變數(全域性靜態變數)是放在方法區中。 成員變數如果沒有例項化那麼變數是放在棧中;例項化了物件放在堆中,棧中放的是指向堆中物件的引用地址。 區域性變數放在棧中,new的物件放在堆中,8中基本資料型別變數放在棧中,變數所對應的值是放在棧幀中。 生命週期
區域性變數、全域性變數、堆、棧
預備知識—程式的記憶體分配 一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分 棧區(stack)— 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。 堆區(heap) — 一般由程式設計師分配釋放,若程式設計師不釋放,程