語言採用的是lexical scoping(詞法作用域)。詞法作用域,又稱靜態作用域,即變數定義後的作用域是不變的。
在函式的主體裡面,變數是分為被約束的、區域性的、或自由的三種。被約束的變數是指匹配函式形式引數的變數。區域性變數是指,在函式主題內建立和定義的變數。
自由變數指的是那些既不是 區域性也不是被約束的變數。當乙個函式主體被求值,確定乙個區域性或 被約束變數的值沒有問題。作用域規則決定了乙個語言如何為自由變數 找恰當的值。
在r中,自由變數的取值是由它所在函式定義的環境(environment)中的取值決定的。看下面一段**:
y <- 10f<- function(x)g <- function(x)
f(3)
求值f(3): y是函式f中的區域性變數,被賦值為2;在函式f內呼叫函式g,在函式g中y是自由變數,g(2)=2*y,y的取值是由定義函式g時決定的,因此y的取值是10而不是2。因此得到值為34。
參見:
C語言變數作用域
作用域描述程式中可訪問識別符號的區域。乙個c變數的作用域可以是塊作用域,函式作用域,函式原型作用域或檔案作用域。int fun int a q作用域結束 在這個例子中,q的作用域只在內層塊,只有內層塊中的 才能訪問q。在c99中,把塊的概念擴充套件到for迴圈,while迴圈,do while迴圈和...
R 環境和變數作用域的問題
在r語言的文獻中,函式被證實地稱為 閉包 closure 函式不僅包括引數和函式體,也包括它的 環境 environment 環境是由建立函式時出現的物件集構成。頂層環境 w 12 f function y return h environment f 此例中,函式f 是在頂層 直譯器命令提示符下 ...
Python語言(五)變數作用域
變數的作用是有範圍的,準確說世上任何事物對外作用都是有範圍限制的。而變數或者符號,背後代表著不同的意思,能對他們求值,就要去在求值的地方能看見它們,這些地方就是變數的作用域。作用域粗略的可以分為區域性作用域和全域性作用域。區域性變數就具有區域性作用域,分為函式內變數 類變數和檔案訪問變數。作用域不同...