24.for循环的let和var

es6新增let命令用来声明变量,但是与var的区别是let声明的变量只在let所在的代码块里面有效[图片上传失败...(image-ecfc47-1526016908749)]
我一直很好奇的是在for循环里面使用let和var的那种神奇差别到底是怎么产生的,尤其是每次面试题里面出现这个,然后我只能回答的知其然而不知其所以然的时候,如鲠在喉,难过,好了今天看见一篇帖子嗯瞬间就明白了

  • js是弱类型语言,我们可以看见变量 i 的类型会根据赋值的不同而改变
var i = 0;
(function () {
    console.log(typeof i);  
    i = 'zb';
    console.log(typeof i);  
    
}());
console.log(i + '$$$')
// number  --> 第一次在全局定义为number型
// string     --> 重新赋值以后变为string类型
// zb$$$
  • 但是如果是for循环呢,你会发现会有所不同
console.log(i + '****');   
console.log(typeof i);

for (var i = 0; i < 3; i++) {
    
    console.log(typeof i);

    var i = 'qbc';
    console.log(typeof i);  

    console.log(i);    
}

console.log(typeof i);
console.log(i);
console.log(i + '$$$');  
// undefined****
// undefined  --> 初次未定义
// number     --> for循环定义为number型
// string        --> for循环内部修改为string型
// qbc
// number    -->但是为什么在外面还是被定义为number型,这真的是一个神奇的存在@2
// NaN
// NaN$$$
undefined
  • @2 网上有一种说法就是for循环设置循环变量的那个作用域是父作用域,而循环体内部是一个单独的子作用域.
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice阅读 5,538评论 0 2
  • 本文属个人笔记,不做详解,仅供参考! let命令 基本用法 ES6 新增了let命令,用来声明变量。它的用法类似于...
    R_yan阅读 29,214评论 6 18
  • let 和 const 命令 let 命令 块级作用域 const 命令 顶层对象的属性 gl...
    安小明阅读 4,542评论 0 0
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,710评论 0 13
  • Tags: 加班 外地人:你们北京人有什么了不起的?北京人微微笑了一下,深深地吸了一口气(雾霾)外地人:这有什么啊...
    哈慈开阅读 1,819评论 0 0

友情链接更多精彩内容