声明变量,侦听器,作用域,键值对

一、声明变量

1.变量声明let :ES6新语法,用来声明变量

   作用:

  1. 声明一个块级作用域的本地变量
  2. 可以设置初始值

语法:

//声明变量
        let x
        //声明并设置初始值
        let y = 10

        console.log(y);
        //重新赋值
        y = "你好世界"
        //打印结果
        console.log(y); //你好世界

注意点:

a.不允许重复声明:let不允许在相同作用域内,重复声明同一个变量。             

b.有块级作用域:它的用法类似于var,但是所声明的变量,只能在let命令所在的代码块内有效。

          在下面代码块之中,分别用let和var声明了两个变量。

{
    let a = 10;
     var b = 1;
    console.log(a);//10 
    console.log(b);//1
}
        // console.log(a); //undefined
        // console.log(b); //1
        // 结果let声明的变量报错,var声明的变量返回了正确的值。
        // 这表面,let声明的变量只在它所在的代码块有效。
        // console.log(a); //a is not defined
        //console.log(b); //1

c.不会变量提升:var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为underfined。  这  种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。为了纠正这种现象,let命令改变了语法行为,它声明的变量一定要在声明后使用,否则报错。

 console.log(foo);
       var foo =2; //undefined
       // let的情况
       console.log(bar);Cannot access "bar’ before initialization(无法在初始化之前访问变 )
       let bar = 2;

2.变量声明var

作用:

  1. 数组变量
  2. 和let非常相似

语法:

//1.声明变量
        var food
        //2.变量声明+初始值
        var noodle = "牛肉面"
        //3.重新赋值
        noodle = '牛肉面'
        console.log(noodle);

        //【注意点1:变量会提升】
        console.log(num);
        var num = 10;

        //【注意点2:没有块级作用域】
        for(var i = 1; i < 5 ; i++){
            console.log('循环内' + i);
        }

3.常量声明const

const声明一个只读的常量。一旦声明,常量的值就不能改变。

注意点:

a.基本类型数据无法重新赋值

b.必须设置初始值:const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值

c.有块级作用域:const的作用域和let命令相同:只在声明的块级作用域内有效

d.不会变量提升:const命令声明的常量也是不能提升,同样存在暂时性死区,只能在声明的位置后面使用。

在const中,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。 但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针。

 const只能保证这个指针是固定的(即总是指向另一个固定的地址)。

基本数据类型无法重新赋值。

引用类型(对象、数组...),可以更改内容。(注:不能改的是栈)

4.变量提升

1.定义:变量提升即将变量声明提升到它所在作用域

2.作用:通过var定义(声明)的变量,在定义语句之前就可以访问到。

console.log(a); //underfind
        var a = 1;

        //因为有变量提升的缘故,上面的代码实际的执行顺序为:
        var a;
        console.log(a);
        a = 1;

二、侦听器

作用:用来侦听数据有没有变化,一旦有变化就调用函数

语法:在和data、methods这些平级的位置写一个watch

new Vue({
            el:'',
            data:{},
            methods:{},
            //侦听器
            watch:{
                //参数一:改变后的值
                //参数二:改变前的值
                要侦听的数据(newValue,oldValue){

                }
            }
        })

对数组进行侦听

数组是应用类型,存在比较复杂的侦听规则。

    从理论上说,修改一个数组的内容,比如修改数组中某个元素的值,或者给数组添加新的元素,都不会修改数组本身的地址。为此.Vue.is对数组做了特殊处理,使得使用标准的数组操作方法对数组所做的修改,都可以被侦听到。

    1.Vue不能检测以下数组的变动:

    a.当你利用索引值直接设置一个数组时,例如:vm.items[index0fItem] = newValue

    b.当你修改数组的长度时,例如:vm.items.length = newlength

    2.使用标准方法修改数组可以被侦听到

https://v2.cn.vueis.org/v2/guide/list.html#%E6%95%B0%E7%BB%84%E6%9B%B4%E6%96%B0%E6%A3%80%E6%B5%8B

    push() 尾部添加

    pop()尾部删除

    unshift()头部添加

    shift()头部删除

    splice()删除、添加、替换

    sort()排序

    reverse()逆序

    (Vue将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新,以上就是被包裹的方法。)

在数组中使用侦听器总结:

    1.彻底替换为一个新数组,那么可以被侦听到。

    2.如果使用了push()等标准的数组操作方法,那么可以被侦听到。

    3.如果直接修改数组的元素,那么无法被侦听到。

    /(解决方法:使用$set(()方法修改元素的值。Vue3语法。)

    不要使用length属性来修改数组长度,而改用其他标准方法显示数组长度的变化。

三、作用域

1.定义:

作用域是运行时代码中某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码中变量和其他资源的可见性。

function Fun(){
            let a = '内层变量'
            console.log(a);
        }
        Fun();
        console.log(a);

        function fun(){
            let a = '变量'
            console.log(a);
        }
        fun()
        // console.log(a);  // a is not defined

        变量a在全局作用域没有声明,所以在全局作用域下取值会报错。

        作用域就是一个独立的地盘,让变量不会外泄、暴露出去。

        作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。

        ES6之前JavaScript没有块级作用域,只有全局作用域和函数作用域。

        ES6的到来,为我们提供了"块级作用域",可通过新增命令let和const来体现。

2.函数作用域

function outFun(){
            var a = '函数内部的变量';

            function innerFun(){
                console.log(a); //函数内部的变量
            }
            innerFun();
        }
        // console.log(a);  //a is not difined
        innerFun; //innerFun is not difined
        outFun()

四、键值对

1.什么是键值对?

        键值对('key = value')        顾名思义,每一个键会对应一个值。

2.举例

   a:身份证号和你本人是绑定的关系。每一个身份证号(键)都会对应一个人(值)。

   b:我们在登录微信或者游戏时,需要输入手机号验证身份。系统会向该手机号发送一条验证短信。

      这里的手机号码(键),对应的接收用户就是值。

      每个键对应响应的值,当按下响应的键时,就会输出响应的结果。

      键:就是存的值的编号。

      值:就是要存放的数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值