美文网首页
函数、变量的提升

函数、变量的提升

作者: MISS_3ca2 | 来源:发表于2020-08-05 16:17 被阅读0次
var 声明的变量存在变量提升,而let const 声明的变量不存在变量提升,所以一定要先声明再使用
在js中,函数及变量的声明都将被提升到函数的最顶部,也就说var声明的变量可以先使用再声明
    console.log(q) 
        var q = 1;
        //打印undefined  变量提升
        //JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
        //JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
        f();
        fn();//fn is not a function 

        //函数表达式
        var fn = function(){
            console.log(1)
        }

        //函数声明
        function f(){
            console.log(0)
        }
        //函数提升,只会提升函数声明,而不是提升函数表达式
            //let const 声明的变量不存在变量提升,所以一定要先声明再使用
            // es6明确规定,如果区块中存在let命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域,凡是在声明之前就使用这些变量,会报错,
            // 所以在代码块内,使用let声明变量之前,该变量都是不可用的。这在语法上称为暂时性死区,在死区中禁止访问该变量
            // let声明的变量存在变量提升,但是由于死区我们无法在声明前访问这个变量
            console.log(b) //Uncaught ReferenceError: Cannot access 'b' before initialization
            let b =2;
let关键字可以将变量绑定到所在的任意作用域中,通常是{...}内部
let是块级作用域,即在整个{}内可见
<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
</body>
//for循环有一个特别之处,就是循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域
var div = document.querySelectorAll('div');
for(let i=0;i<div .length;i++ ){
    div[i].onclick = function(){
        console.log(i) //输出对应下标
    }
}

for(var i =0; i<div.length;i++){
    div[i].onclick = function(){
        console.log(i) //每次都输出5
    }
}
//在没有let之前想要输出对应下标,用闭包解决
for(var i=0;i<div.length;i++){
    (function(i){
        div[i].onclick = function(){
            console.log(i)
        }
    })(i)
}

相关文章

  • js3-函数变量提升 顶层函数 数据类型转换 Math对象 js

    函数变量的提升 函数内部变量提升: 函数内部使用变量, 默认情况下, 函数会把下面变量它的声明提升到函数的最上边 ...

  • let const var

    变量提升 函数会优先于变量提升; 函数提升会把整个函数移到作用域顶部 变量提升智慧把变量的定义移到作用域顶部 wi...

  • 关于变量提升

    函数提升的优先级要高于变量提升,变量提升到函数声明的后面; 变量提升,但是赋值不提升,函数表达式不提升;

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • 引用类型

    变量提升和函数声明提升   函数声明提升就是把函数声明提升到函数声明所在作用域中(或者说一个函数体内)的顶端,变量...

  • 2021-04-02

    变量提升和函数提升以及他们的优先级 1,变量提升:变量提升是指将变量声明提升到它所在的作用域的最开始部分 2,函数...

  • 闭包

    提升 1 变量提升 2 函数表达式 函数表达式的提升 === 变量提升 3 函数声明 demo 执行环境&词法作用...

  • JavaScript的变量提升

    变量提升 demo var的变量提升只是定义提升至最前,变量的赋值不会提升 创建函数的有两种方式 函数声明func...

  • es6

    let const var 函数提升优先于变量提升,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用...

  • Javascript 变量执行过程 和 数组 & 对象的区别

    变量提升 JS执行过程1. 先提升(先提升函数,再提升变量,如果名字一样,变量提升会覆盖函数提升)2. 再执行,如...

网友评论

      本文标题:函数、变量的提升

      本文链接:https://www.haomeiwen.com/subject/eowvrktx.html