对于作用域和闭包的理解
1.先说作用域
变量既可以是全局的也可以是局部的。我认为全局变量就是你声明后这个变量之后在脚本中的任何位置都可以访问引用。局部变量一般是在函数内部。
例子
var color = "red"; // 全局变量 function changeColor (){
var color1 = "bule"; //局部变量 if ( color === color1){ //在这里可以访问全局变量color color = "blue"; }else{ color = "red"; } }
例子2.写的有点乱 不过 明白每个变量的作用域就好。
var color = "blue" ; function changeColor (){ var hat = "yellow"; function hatColor (){ var paper = hat ;//可以访问hat var hat = color;//可以访问color var num = 1; } hatColor();//不可访问num } changeColor ();//只能访问color
2.延长作用域。
是变量分为全局变量和局部变量。但是还有其他办法延长作用域链。
♦ try-catch 语句的catch
♦ with 语句
try { //程序中抛出异常 throw value; } catch(valuetype v) { //例外处理程序段 }
function buildUrl () { var a= "biubiubiu"; with (location){ //with 语句接受location 对象 包括了location的所有属性和方法 var url = href + a ; // 引用location的href的变量也就是 location.href } return url ; }
二、 闭包
闭包是指一些函数通过某种方式可以随时被访问,即使他的外部代码已经执行完毕。
怎么说我也说不清 代码吧
创建闭包常见方式,就是在一个函数内部创建另一函数。
当function里嵌套function时,内部的function可以访问外部function里的变量。
function add(x) { var num = 3; return function (y) { alert(x + y + (++num)); } } var bar = add(2); bar(10);
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
连接时Mozilla的解释