深入作用域之靜態作用域與動態作用域

2021-10-09 02:23:13 字數 546 閱讀 1163

概念:

靜態作用域指的是一段**,在它執行之前就已經確定了它的作用域,簡單來說就是在執行之前就確定了它可以應用哪些地方的作用域(變數)。

動態作用域在**執行的時候才確定它的作用域的,以及作用域鏈。

靜態作用域:

var a = 10;

function

fn()

fn(); //11

在建立函式fn的時候就已經確定了它可以作用那些變數,如果函式fn裡面有變數a就直接作用函式fn裡面的變數a,如果沒有就往上一級找,這就是靜態作用域。

動態作用域:

var a = 10;

function

fn(a)

fn(1); //2

你肯定會疑問你上面不是說,函式fn在建立的時候就已經確定了它的作用域嗎?為什麼現在又不是了?其實一開始它確實已經確定了它的作用域,但是又因為你在呼叫這個fn的時候寫了引數,這個函式fn的作用域又發生了改變,變成了動態的作用域,於是它作用了在函式體內的變數a。

程式語言的靜態作用域和動態作用域

首先我們看一段程式 include stdio.h intx 5 usr bin perl subf subg x,y,z top top top f print at top after f x x,y y,z z 程式的輸出結果 in f after g x f,y g,z g at top a...

靜態作用域

詞法作用域其實是指作用域在詞法解析階段既確定了,不會改變 基本型別 var foo 1 function sta function 列印出1 而不是 2 因為sta的scope在建立時,記錄的foo是1。如果js是動態作用域,那麼他應該彈出2 var foo 1 function sta funct...

詞法作用域和動態作用域

作用域是指程式源 中定義變數的區域。它規定了如何查詢變數,也是就確定當前執行 對變數的訪問許可權。js 採用了詞法作用域 lexical scoping 也就是靜態作用域。js 採用的詞法作用域是靜態作用域,因此函式的作用域在函式定義的時候就決定了。與靜態作用域相對的是動態作用域,函式的作用域是在函...