js中变量声明的规则

简介: js中变量声明的规则

今天学习这个js,在js中发现声明的变量使用的这个过程并不像在C#中如果使用变量一定要先声明的形式,在js中变量的声明在你方法中任何地方声明后,你在方法开始处就调用这个变量也可以,


可以看一下下面的代码

var func = function() {
  var num = 10;
  var sub_func = function() {
            alert(num);
    var num = 20;
    alert(num);
  };
  sub_func();
  };
  func();


//

可以看到在这个方法中最后输出的结果是多少呢?


在第一个alert输出的结果是 undefined,而第二个alert输出的结果就是20,请问为什么?


因为在这个代码中 sub_func方法中的第一个alert在去调用num的时候去到了他所在的这个方法中寻找是否有这个名字的变量,如果在当前的方法域中找到这个变量就使用这个变量,如果没有就去到上一级的父级域中去搜索,如果搜索到就使用父级域的变量,那么可以看到我们sub_func这个方法中是有num这个变量的,其实这个代码的等效形式是这样的

var func = function() {
  var num = 10;
  var sub_func = function() {
            var num;
            alert(num);
    num = 20;
    alert(num);
  };
  sub_func();
  };
  func();


/

可以看到,在这个sub_func方法中的 num其实是在方法的一开始就进行了声明,只是没有赋值而已,而到了下面num就进行了一个赋值操作而已,所以在js中声明变量一定要在最一开始就进行声明,否则就会出现第一个代码段的情况。js并不像在C#中那样,编译环境会提示告诉调用的变量有问题,因为代码是按照循序执行他并有在它上一级找到这个变量。


那么可以看一下下面这个代码它的输出值


var func = function() {
  var num = 10;
  var sub_func = function() {
    var num = 20;
    alert(num);
  };
  sub_func();
  };
  func();

这一个的输出参数就是20,为什么,因为他在sub_func这个方法中找到了num这个变量,所以输出结果为20,那么如果这个sub_func方法中并没有num的话输出的就是父级域的num值了。


所以在js中方法的变量使用时一定要先声明,一定要声明在变量的开始位置。不然就可能会出现上述的情况。


相关文章
|
6月前
|
JavaScript 前端开发 C++
|
6月前
|
JavaScript 前端开发 应用服务中间件
JavaScript 变量声明详解const 、let、 var
JavaScript 变量声明详解const 、let、 var
86 1
|
6月前
Turndown 源码分析:二、规则`commonmark-ruiles.js` REV1
Turndown 源码分析:二、规则`commonmark-ruiles.js` REV1
44 0
|
6月前
Turndown 源码分析:三、规则集`rules.js` REV1
Turndown 源码分析:三、规则集`rules.js` REV1
53 0
|
6月前
|
JavaScript 前端开发
JavaScript标识符(命名规则)
JavaScript标识符(命名规则)
64 0
|
3月前
|
JavaScript 前端开发 开发者
|
30天前
|
JavaScript 前端开发
JS隐式类型转换规则
【10月更文挑战第9天】 不同的 JavaScript 引擎可能在隐式类型转换的具体实现上存在一些细微差别。理解这些隐式类型转换规则对于正确处理数据和避免错误非常重要。
16 0
|
2月前
|
存储 JavaScript 前端开发
JavaScript变量声明:深入理解与最佳实践
JavaScript变量声明:深入理解与最佳实践
|
3月前
|
JavaScript 前端开发
JavaScript的命名规则
JavaScript的命名规则
100 0
|
3月前
|
JavaScript 前端开发
js中的命名规则
js中的命名规则