变量、作用域,以及变量提升

变量、作用域和内存问题

全局变量:全局变量定义可以提供给所有代码块和函数调用

 if(true){

        var c=33

    }console.log(c)//33 可以访问到

私有变量:在js下,只有函数里定义的变量才是私有的

 var a=11

    function fun(){

        var b=12

        console.log(a)//11

        console.log(b)//12

    }

    fun()

    console.log(a)//11

    console.log(b)//报错,调用不到,b是私有变量

基本数据类型:null undefined number string boolean

引用数据类型:object

 

变量提升和作用域

预解释(变量提升)

在当前的作用域中,js代码执行之前,浏览器首先会把带var和function的声明内容,进行提前声明或定义

声明和定义区别

var a //声明:告知浏览器在内存中存储一个变量

var b=11//定义:不但定义了变量,还进行了赋值

变量提升的函数和变量的区别

var在内存中只完成了声明

function在内存中完成了声明和定义,只是函数没调用时存储的是字符串

例如:

Console.log(a)//输出undefined

Var a=11

fun()//执行函数

function fun(){

Console.log(这是函数)

}

变量提升注意事项

1、不定义var 的区别

   console.log(a)//undefined

    console.log(b)//报错,没有变量提升的过程

    var a=11

    b=22

2、不管条件是否成立,都要进行变量提升

console.log(a)//输出undefined变量还存在

    if(false){

        var a=12

    }

  1. 当执行一个匿名函数的时候,是不进行预解释的,代码的执行和定义一起完成了
(function(){

         var a=b=3 //var b=3 a=b

        })()

        console.log(b)//3 先声明了b  b变量提升了

        console.log(a)//报错 a没有域解释 a没有变量提升
  1. 当函数里的return语句执行时,下面的语句虽然不执行,但也需要变量提升

注意:函数作用域下,有私有变量找私有变量,没有找形参,形参没有,找全局,如果形参和私有变量进行了变量提升,就不会找全局变量了,输出undefined

function fun(){

                console.log(a)

                return false

                var a=66

            }

            fun()
  1. 在js中,变量和函数名称重复了,也会冲突,在变量提升时,如果名称声明过了,不会再次声明,但是可以重新赋值
  function num(){

         console.log(111)

       }

       num()

var num=66

       console.log(num)//输出:66;var不会重新声明,但是可以改变值

       num()//报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔子^-^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值