1. 程式人生 > >js中 區域性變數、全域性變數、閉包

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) — 一般由程式設計師分配釋放,若程式設計師不釋放,程