学习笔记《JS作用域和作用域链》

本文大多由网友整理,本人参考后自己略加总结、收纳,不喜勿喷。

Javascript的作用域

1. 全局作用域(Global Scope)

在代码任何位置都能访问到的对象都具有全局作用域,一般有3中情况:

(1)最外层函数、最外层函数之外定义的变量拥有全局作用域,代码如下:
var authorName = "山边小溪";
function doSomething(){
var blogName = "梦想天空";
function innerSay(){
    alert(blogName);
}
innerSay();
}
alert(authorName);//山边小溪
alert(blogName);//脚本报错
doSomething();//梦想天空
innerSay()//脚本报错
(2)所有没有定义而直接赋值的变量拥有全局作用域,代码如下:
function doSomething(){
var authorName = "山边小溪";
blogName = "梦想天空";
alert(authorName);
}
doSomething(); //山边小溪
alert(blogName);//梦想天空
alert(authorName);//脚本报错

其中blogName没有定义直接赋值就拥有全局作用域,而调用authorName就会报错。

(3)所有window对象的属性拥有全局作用域

例如window.name、window.location、window.top等等。

2. 局部作用域(Local Scope)

局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域,例如下列代码中的blogName和函数innerSay都只拥有局部作用域。

function doSomething(){
var blogName = "梦想天空";
function innerSay(){
    alert(blogName);
}
innerSay();
}
alert(blogName);//脚本错误
innerSay();//脚本错误

作用域链(Scope Chain)

明天待续

你可能感兴趣的:(学习笔记《JS作用域和作用域链》)