范围链是指当函式本身没有所需的变数时,会向外层寻找该变数,而范围链只取决於函式的作用域,与执行环境无关。
下面 4 个例子,皆以程序的运作过程来撰写,当作复习昨天的执行环境与执行堆叠,但需要注意的是范围链只取决於函式的作用域,与执行环境无关
,又因 JavaScript 是静态作用域的关系,在写下程序码时就已经决定作用域,所以当函式本身没有需要的变数时,会向外层寻找该变数
全域执行环境
,命名 变数 name
赋予值 Carol
,呼叫 函式 fn2
函式 fn2 执行环境
,命名 变数 name
赋予值 Carol
,呼叫 函式 fn1
函式 fn1 执行环境
,在 函式 fn1
需要 变数 name
,在内层找不到,就会向外层 全域环境
中寻找 变数 name
函式 fn1 执行环境
函式 fn2 执行环境
全域执行环境
var name = 'Carol';
function fn1() {
console.log(name);
// 范围链指向全域环境,故显示 Carol
}
function fn2() {
var name = 'Marry';
fn1();
}
fn2();
全域执行环境
,命名 变数 name
赋予值 Carol
,呼叫 函式 fn1
函式 fn1 执行环境
,在函式内命名 变数 name
赋予值 Mary
,呼叫 函式 fn2
函式 fn2 执行环境
,需要 变数 name
,在函式内找到 变数 name
,故显示 Casper
。函式 fn2 执行环境
函式 fn1 执行环境
全域执行环境
var name = 'Carol';
function fn1() {
var name = 'Marry';
function fn2() {
var name = 'Casper';
console.log(name); // Casper
}
fn2();
}
fn1();
全域执行环境
,命名 变数 name
赋予值 Carol
,呼叫 函式 fn1
函式 fn1 执行环境
,在函式内命名 变数 name
赋予值 Mary
,呼叫 函式 fn2
函式 fn2 执行环境
,需要 变数 name
,因在函式内找不到,向外层 函式 fn1
寻找,故显示 Marry
。函式 fn2 执行环境
函式 fn1 执行环境
全域执行环境
var name = 'Carol';
function fn1() {
var name = 'Marry';
function fn2() {
console.log(name); // Marry
}
fn2();
}
fn1();
全域执行环境
,命名 变数 name
赋予值 Carol
,呼叫 函式 fn1
函式 fn1 执行环境
,在函式内命名 变数 name
赋予值 Mary
,呼叫 函式 fn2
函式 fn2 执行环境
,需要 变数 name
,因在函式内找不到,向外层 函式 fn1
寻找,也找不到,再向外层 全域执行环境
中寻找,故显示 Carol
。函式 fn2 执行环境
函式 fn1 执行环境
全域执行环境
var name = 'Carol';
function fn1() {
function fn2() {
console.log(name); // Carol
}
fn2();
}
fn1();
图片待补
本系列文章复习了一些业界常考演算法 从中也一再的复习/整理自己所学,厘清一些概念,希望大家经过一系...
Laravel目录结构 先来说说各个目录及资料夹里面放置档案,并没有强制规定 根目录 app目录 a...
1. 正则表达式搜集 (1) 0~20字元限制 /^\S{0,20}$/ a. 非空白开头 b. {...
这次中秋连假返乡 顺路到彰化市区吃一波在地美食 从彰化火车站附近开吃 第一站北门口肉圆 脆皮是彰化肉...
前言 从去年就看到学长们在做铁人赛崩溃的样子,没想到这麽快,今年换我们了(;´༎ຶД༎ຶ`) 对於刚...