作用域决定了变量的可访问性(可见性)。

JavaScript函数的作用域

JavaScript中,有两种作用域类型:

在JavaScript中,每创建一个函数都是创建了一个新的作用域。
而作用域决定了其函数内外各种变量的可访问性(可见性)。
定义在函数内的变量,无法在函数外面被访问。
而函数外面定义的变量,可以在函数内被访问么?继续。

局部变量

定义在函数内的变量即为局部变量。作用于本地域。只能在函数内被访问,操作。

// 这里不可以用carName
function myFunction() {
    var carName = "Volvo";
    // 这里可以用carName
}

由于局部变量只作用于函数内,所以在多个函数内可以使用同样的变量名。局部变量在函数开始执行的时候被创建,在函数执行完毕后被删除。

全局变量

定义在函数外面的变量,具有全局特性。作用于全局,网页当中的所有脚本及函数都可以去访问它。

var carName = "Volvo";
// 这里可以用carName
function myFunction() {    
    // 这里也可以用carName
}
JavaScript变量

JavaScript中,对象和函数都可以是变量。
作用域决定了变量、对象及函数在各部分代码中的可访问性,可操作性。

自动全局化

如果,您对未声明的变量进行赋值,这个变量将会自动成为全局变量。
看下面的例子:

function myFunction() {    
    carName = "Volvo"; // 定义了全局变量,并进行了赋值操作
}

这个代码示例,声明了一个全局变量carName,即使该值是在一个函数内部赋值的。

Strict Mode(严格模式)

所有的现代浏览器都支持变量在严格模式下运行。例如,我们在函数的第一行加入:use strict,就可以让代码在严格模式下运行。

function myFunction() {    
   "use strict";
   // 更多代码
}

“use strict” 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
它不是一条语句,但是是一个字面量表达式。
“use strict” 的目的是指定代码在严格条件下执行。
严格模式下你不能使用未声明的变量。

为什么使用严格模式:

“严格模式”体现了Javascript更合理、更安全、更严谨的发展方向。
一些在”正常模式”下可以运行的语句,在”严格模式”下将不能运行。
更多关于严格模式的内容在之后的课程中介绍。

全局变量在HTML中

在HTML中,全局变量是一个window对象,所有的全局变量都归window对象所有。

var carName = "Volvo";
// 这里的代码可以用window.carName的方式
警告!

不到万不得已,不要创建全局变量。除非你已经准备好了。因为,你创建的全局变量或者函数会与window变量或者函数冲突。window要比document级别高。对于新手来讲全局变量不好把控。

Javascript变量的生命周期

Javascript变量在函数执行时被创建,函数执行完毕后被删除。在浏览器中,全局变量是在你关闭浏览器窗口或者浏览器标签的时候被删除。但是当你在当前窗口中打开新的一个页面时,该全局变量依然可用。就是说,X站里有一个全局变量,当前窗口打开Y站时,Y站依然可以用该全局变量。是不是有点…>_>