zoukankan      html  css  js  c++  java
  • js中变量的作用域,let,const详解

    1)函数体中的在函数体外不能用

    2)如果两个函数使用相同的变量名,只要在函数内部,就不冲突

    3)函数成员可以访问函数内部的成员,反之不行

    4)假设,内部函数变量和外部函数的变量重名,由内向外查找。

    提升变量的作用域

    1 function fun() {
    2 
    3    var x = "x" + y;
    4    console.log(x);
    5    var y = 'y';
    6 }

    结果:undefined

    说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值

    1 function fun() {
    2 
    3   var y;
    4   var x = "x" + y;
    5   console.log(x);
    6   y = "y";
    7 }

    这个是js在建立之初就存在的特性。养成规范:所有的变量定义都放在函数的头部,不要乱放,便于代码维护。

    1 function fun2() {
    2   var x = 1,
    3         y = x + 1,
    4         z,i,a;
    5   
    6  // 之后随意用
    7 }

    全局变量

    1 x = 1;
    2 function f() {
    3    console.log(x);
    4 }
    5 f();
    6 console.log(x);

    全局对象window

    var x = 'xxx';
    alert(x);
    alert(window.x) ;// 默认的全局变量,都会自动绑定在window对象下

    alert()这个函数本身也是一个window变量

    1 var x = 'xxx';
    2 window.alert(x);
    3 var old_alert=window.alert;
    4 window.alert = function() {
    5 
    6 };
    7 // 发现alert()失效了

    js实际上只会有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,拨错refernceError

    规范:

    由于我们所有的全局变量都会绑定到我们的window上。如果不同的js文件,使用了相同的全局变量,会发生冲突:如何解决冲突?

    1 // 唯一全局变量
    2 var MyCode = {};
    3 
    4 // 定义全局变量
    5 MyCode .name = "zhangsan";
    6 MyCode .add = function (a, b) {
    7      return a + b;
    8 }

    把自己的代码全部放到自己定义的唯一空间名字中,降低全局命名冲突的问题

    jQuery就是这样干

    局部变量用let,定义常量用const

  • 相关阅读:
    [leetCode]剑指 Offer 62. 圆圈中最后剩下的数字
    [leetCode]剑指 Offer 61. 扑克牌中的顺子
    [leetCode]剑指 Offer 60. n个骰子的点数
    POJ
    POJ
    POJ
    codeforces
    LightOJ
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14736563.html
Copyright © 2011-2022 走看看