你的位置:首页 > Java教程

[Java教程]Javascript我学之四作用域


本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘

作用域 

         JavaScript的变量作用域只有两种,全局作用域和函数作用域。

 

函数的作用域

          函数中定义的变量是私有的,仅在本函数范围内有效,称为“函数作用域”。

          

1    //每个函数,都定义了一个作用域2     function add(num1, num2) {3       var sum = num1 + num2;4       return sum;5     }6     console.info(add(100, 200)); //3007     console.info(sum); //出错!

 

块作用域与同名变量

           JavaScript是没块作用域的

 1      function doSomething(doIt) { 2       var color = "blue"; 3       if (doIt) { 4         var color = "red"; 5         console.info("在条件语句中的Color=" + color); 6       } 7       console.info("在条件语句外的Color=" + color); 8     }; 9    10     doSomething(false);  //在条件语句外的Color=blue11     doSomething(true);   //在条件语句中的Color=red,在条件语句外的Color=red

          在if()语句块中定义的color变量,与外部定义的color同名,所以是同一个变量,这是因为javascript并没有块作用域。这与java,c#是不一样的。

 

变量提升(Hoist)        

编译器把函数中后部定义的变量统一移到函数开头进行定义

1     //hoist: 变量提升2     var v = "hello";3     (function () {4       //输出undefined5       console.info(v);6       var v = "world";7     })();

等价于

1     var v = "hello";2     (function () {3       var v;4       console.info(v);5       v = "world";6     })();

 所以在函数中定义变量时,要在函数开头集中定义变量,不要在“中途”“临时想起来”地定义变量。

嵌套函数可访问的变量

嵌套的函数,内部函数可以访问外部函数定义的变量,也能访问全局变量

 1     //嵌套函数的变量访问 2     var world = "world "; 3     function sayHello() { 4       var hello = "Hello "; 5       function inner() { 6         var info = " in inner function"; 7         console.info(hello + world + info); 8       } 9       inner();10     }11     sayHello(); //hello world in inner function

 

再谈同名变量

 定义变量时,一定要使用var!如没写,就会是全局变量.

 1     var myColor = "red"; 2     //输出:myColor before myFunc() red 3     console.info("myColor before myFunc()", myColor); 4     function myFunc() { 5       //这里有没有var,很关键! 没写var, mycolor就变成全局变量 6       var myColor = "blue "; 7       //输出:myColor inside myFunc() blue 8       console.info("myColor inside myFunc()", myColor); 9     }10     myFunc();11     //输出:myColor after myFunc() red12     //当第6行去掉var时,这里输出:myColor after myFunc() blue13     console.info("myColor after myFunc()", myColor);

 

变量的查找过程

 自下而上,由内至外

1     //变量的查找过程2     var color = "blue";3     function outer() {4       function getColor() {5         return color;6       }7       console.info(getColor()); //blue8     };9     outer();

 




海南旅游攻略大全海南旅游路线推荐海南自驾游攻略海南旅游线路大全什么时候去海南旅游最好探险海南儋州石花水洞 游走水帘洞天 人间四月天 边走边吃寻找盐城最美的地方 没有速度也有激情 驰骋广东最美公路 隐世广西宜州 藏于山水之间的三姐故里 享受至上的时代 酒店另类服务迎客[三] 2015三八节百万葵园有什么活动?番禺百万葵园三八妇女节活动介绍? 盘点宁德、三明、南平、莆田、龙岩桃花观赏地 2015广州长隆野生动物园奇妙的朋友拍摄地?奇妙的朋友在长隆哪里拍的? 长隆万圣节门票团购价格?广州长隆万圣节优惠票预订? 长隆欢乐世界万圣节活动介绍?广州长隆万圣节是几号到几号? 长隆万圣节订票电话?广州长隆万圣节预订优惠吗? 长隆万圣节时间?广州长隆万圣节有什么好玩的? 迪拜塔门票多少? 11月份去泰国旅游好不好? 2015泰国水灯节是什么时候? 马尔代夫宁静岛在哪?怎么样? IDT71V3558S100BQ Datasheet IDT71V3558S100BQ Datasheet IDT72V3626L10PF Datasheet IDT72V3626L10PF Datasheet IDT71V3558S100BQ8 Datasheet IDT71V3558S100BQ8 Datasheet 黑龙江去港澳五天四晚游 黑龙江去港澳五天四晚游 黑龙江去港澳五天四晚游 大兴安岭到港澳三天两晚价格 大兴安岭到港澳三天两晚价格 大兴安岭到港澳三天两晚价格 佳木斯到港澳三天两晚价格 佳木斯到港澳三天两晚价格 佳木斯到港澳三天两晚价格