js作用域和对象的知识点(学了一个月还有人不知道)

作用域概述:

通常来说 : 一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

作用域有三种 :

1. 全局作用域【全局有效】 :作用与所有代码的执行的环境(整个script标签内部) 或者一个独立的js文件

2.局部作用域  【局部有效】:作用于函数内的代码环境,就是局部作用域,因为跟函数有关系也称为函数作用域。

3.块级作用域 【{}内有效】 :块作用域由{}包括,if语句和for语句里面的{}等

2.变量的作用域

在javascript中,根据作用域的不同 ,变量可分为

1.全局变量: [函数外的let变量] 全局变量在任何区域都可以访问和修改

2.局部变量: 【函数内部的let变量】局部变量只能在当前函数内被修改和访问

3.块级变量: 【{}内部的let变量】 let定义的变量在能在块作用域里访问,不能跨块访问,也不能跨函数访问

3.变量的作用域

变量只有一个坑

如果函数内部或者块级作用域内部 ,变量没有声明,直接赋值,也可以当全局变量使用,但是不推荐。   

但是有一种情况 函数内的形参可以看作是局部变量

    //如果在函数内的变量没有被声明直接当全局变量来看
        function hell() {
            num = 10;
        }
        hell();
        console.log(num);
        if (true) {
            num2 = 20;
        }
        console.log(num2);

3.变量访问原则-作用域链

1.只要是代码,就至少有一个作用域

2.写在函数内部的是局部作用域

3.如果函数中还有函数,那么在这个作用域中又可以诞生一个作用域

4.根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链

作用域链:采用就近原则的方式来查找变量最终的值

代码演示

function fn() {
    let num = 10 ;
    function fn2() {
    let num  = 123;
    console.log(num);
}
    fn2();
}

let num = 456;
fn(); //调用fn函数

//控制台最后输出是123

函数:

对象(object):javascript里面的一种数据类型。 【可以理解为是一种无序的数据集合】

(理解):

        对象用来描述某个事物,例如描述一个人

        人有姓名,年龄,性别等信息,还有吃饭睡觉等功能。

        如果用变量来保存这些信息就比较零散,用对象比较统一

对象声明语法:

let  对象名 {}

对象由属性和方法组成(举个例子)

属性:信息或叫特征(类似css里面的属性) 比如手机尺寸,颜色,重量。

方法:功能或叫行为 比如:手机打电话,发短信,玩游戏。

let person = {
    username: 'andy',
    password: '123456',
    sex: '男',
    sayhi: function() {
    console.log('hi');
}
}

//属性都是成对出现的,包括属性名和值,他们之间用英文:隔开
//多个属性之间用,分隔
//属性就是依附在对象上的变量(外面是变量,对象内就叫属性)
//属性名可以使用“”或'',一般情况下省略,除非名称遇到特殊符号空格,中划线等.

案例:

   let phone = {
            goods : '小米(mi)', //产品信息
            name : '小米小米10青春版',  //名字
            num : '1020102010',     //编号
            weight : '0.55g',       //重量
            address : '中国大陆'    //产地
        }

 4.属性访问

声明对象,并添加若干属性后,可以使用,或[]获得对象中属性对应的值,我称之为属性访问。简单理解就是获得对象里面的属性值

操作对象 

查询对象: 对象.属性 或者 对象['属性'] 对象.方法()

重新赋值:对象.属性 = 值  

                  对象.方法 = function() {

}

对象添加新的数据:

对象名.新属性名 = 新值

删除对象 :

delete 对象名.属性名

遍历对象

对象没有像数组一样的length属性,所以无法确定长度

对象里面是无序的键值对,没有规律,不像数组里面有规律的下标。

    let obj = {
                uname : '小明',
                age : 18,
                sex : '男'
            }

            //for in 循环语句
            //语法
            //k 是变量 k 或者 key value
            for(k in obj) {
                console.log(obj[k]);   //属性名 
            }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值