首页 > 编程语言 > 详细

JavaScript变量的作用域

时间:2020-11-27 11:47:01      阅读:35      评论:0      收藏:0      [点我收藏+]

重点:在函数体中声明的变量,在函数体外不能使用,如果非要实现,可以研究一下闭包

技术分享图片

技术分享图片

假设内部变量发现里面已经有一个x的变量,他就会屏蔽外部的x变量,输出的结果也是内部的变量

//假设内部变量发现里面已经有一个x的变量,他就会屏蔽外部的x变量,输出的结果也是内部的变量
    function myFunction(){
        var x = 1;

        function myFunction2(){
            var x = ‘A‘;
            console.log(‘inner  ‘+x);//inner  A
        }
        myFunction2();
        console.log(‘outer ‘+x);//outer 1
    }
    myFunction();

 

 

技术分享图片

重点:养成规范,所有的变量放到头部,便于维护,如下

function myFunction3(){
  var x = 1,
      y = x + 1,
      z,i,a;//undefined

  //之后随意使用
}

 

 

看到一个新的知识不要只是想记住他,而是想想他为什么这么做

 

定义在函数外面的是全局变量,例如

技术分享图片

重点要练习一下默认的全局变量windows

技术分享图片

 

整理一个比较重要的JavaScript知识点,

JavaScript设计,将所有的全局变量绑定在windows对象中。同时JavaScript还设计使用一个变量x,会先在函数内部寻找是否定义了变量x,如果在内部没有找到定义变量x,就会再函数的外部寻找是否有定义了变量x。

特殊情况,如果内部没有找到变量x,而外部就是全局变量,从外部寻找变量x,也就是从全局变量寻找变量x,其他地方定义的全局变量x就会和函数内部的变量x产生冲突,导致产生不可控的错误。

为了降低这样的冲突,我们约定在写JavaScript时自定义一个全局变量,比如var zhao; 将自己所有要写的变量绑定在自己定义的这个全局变量上,举例,之前我们定义变量x定义为 var x; 现在我们将x定义在自己的全局变量zhao上面,也就是定义为zhao.x

这样就减少了冲突

//自己定义全局变量演示
    var zhao = {};

    //定义全局变量
    zhao.name = "zhangsan";
    zhao.add = function(x,y){
        return x +y;
    }
    //调用全局变量
    console.log("zhao.name = "+ zhao.name);//zhao.name = zhangsan
    console.log("zhao.add = " + zhao.add); //zhao.add = function(x,y){
                                            //  return x +y;
                                            //}

 

 

ES6新特性,局部变量let

之前使用var的问题,var定义的变量出了作用域还可以使用,如下

//之前使用var的问题,var定义的变量出了作用域还可以使用,如下
var myFunction4 = function (){
  for (var i = 0; i < 10; i++) {
    console.log(i);
  }
  console.log("作用域外测试 i = "+i);// 作用域外测试 i = 10
}
myFunction4();

使用let局部变量,解决了这个问题

//使用let局部变量,解决这个问题
    var myFunction5 = function (){
        for (let i = 0; i < 10; i++) {
            console.log(i);
        }
        console.log("作用域外测试 i = "+i);// 报错 i is not defined 说明解决变量出了作用域还可以使用的问题
    }
    myFunction5();

所以,建议使用let定义局部变量

 

ES新特性,常量const

ES6 之前,定义常量只是约定名字为大写,希望大家不要更改名字为大写的变量,但还是可以更改

var PI = 3.14;
console.log(PI);//3.14
PI = 233;
console.log(PI);//233

 

ES6 之后,使用const定义常量,解决这个问题

const PI = 3.14;
console.log(PI);//3.14
PI = 233;
console.log(PI);//报错,TypeError: Assignment to constant variable,说明解决了这个问题

 

JavaScript变量的作用域

原文:https://www.cnblogs.com/realize00/p/14046159.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!