javascrip变量作用域

来源:互联网 发布:淘宝竹鸡打笼 编辑:程序博客网 时间:2024/06/01 23:06
本文和大家分享的主要是javascript中变量作用域相关内容,一起来看看吧,希望对大家学习javascript有所帮助。
  1.var声明的变量是有作用域的,比如我们在函数中用 var 声明一个变量
  1 'use strict';2 function num(){3   //var声明一个变量num14    var num1 = 15;5 }
  函数中声明了一个变量 num1 ,js函数中用 var 声明变量实际上就声明了一个局部变量。局部变量就是在 外部访问不到 只能在 函数内部访问 
  1  'use strict';2  function num(){3    //var声明一个变量num14     var num1 = 15;5  }6  alert(num1);//num1 is not defined
  2.在函数外定义变量的情况
  var num1 = 15;//var声明变量
  alert(num1);//15
  function add(){
  alert(num1+5);
  }
  add();//20
  不在函数中定义的变量是全局变量,全局变量就是在任何地方都可以访问到
  3.不使用 var 的情况
  js允许变量不用声明就可以使用,不用var自动就是全局变量
  num1 = 15;
  alert(num1);//15
  *但你最好不要这样做,如果引入多个js文件里面都有一个不用var声明的全局变量会污染全局,bug也不容易排查。使用严格模式‘use strict’则可避免这种情况
  ‘use strict’;
  num1 = 15;//ReferenceError: num1 is not defined 会报错
  4.两个函数内的变量互不影响
  function num1(){
  var age = 15;
  alert(age);
  }
  num1()//15
  function num2(){
  var age = 16;
  alert(age);
  }
  num2();//16;
  函数内嵌套:内部函数可以访问外部函数的变量,而外部函数访问不了内部函数
  function num(){
  var age =15;
  function num1(){
  var s = age+10;
  alert(s);//25
  }
  alert(s+2);//会报错
  }
  如果是函数内的变量是重名的情况
  function num(){
  var age = 15;
  function num1(){
  var age =20;
  alert(age);//20
  }
  alert(age);//15
  num1();
  }
  num();
  说明函数是从内而外查找的,当内部函数发现与外部函数重名就会自动屏蔽掉外部函数。
  5.变量提升
  变量可以先使用后声明
  function num(){
  y = 5;
  alert(30+y);
  var y;
  }num();//35
  对于上述函数num()javascript引擎看到的是
  function num(){
  var y;
  y =5;
  alert(30+y);
  }
  只能对变量提升,变量初始化不可以提升
  function num(){
  var y=5;
  alert(y+x);
  var x  = 30;
  }
  num();//NaN
  要养成在函数中顶部先声明变量的好习惯!
  在上面也说过了全局变量的概念
  不在任何函数内定义的变量就是全局变量
  js默认有一个全局对象window,全局作用域下的变量都是绑定到window的一个属性。
  var  num = 15;
  alert(num);//15
  alert(window.num)//15

来源:博客园
原创粉丝点击