作用域(变量和函数)

指的是 变量 和 函数的生效范围

在 Ecmascript5及其之前的作用域是 函数作用域,不是块级作用域

根据作用域把变量和函数分为两种

1. 全局变量和全局函数

        全局变量和全局函数的 生命周期,和当前页面一样长

2. 局部变量和局部函数

        包含局部变量的函数,只要在运行以后,该局部变量就会被js的 垃圾回收机制回收

变量的声明(var) 和 函数的定义 都会被前置,他们会被前置到当前作用域的最前面

注意:var 的声明会被前置,let 的不会

//console.log(n);  //报错,let 声明的变量无法前置

let n = 10;
btn.onclick = function(){
    //let n = 10;  //n是局部变量
    n++;
    num.innerHTML = n;
}
show();

js 允许同名函数,但是在调用的时候,后面的函数 会覆盖前面的函数

show();  //出卖我的爱

function show(){
    console.log('我爱你你却爱着他');
}
show();  //出卖我的爱

function show(){
    console.log('出卖我的爱');
}
show();  //出卖我的爱

js中的原则,在js中外部不能访问函数的局部变量,然而在一个函数中,可以访问外部的全局变量

可以简单理解为 外面的看不到里面,里面看得到外面

当函数的内部定义变量的时候,如果没有声明关键字,则此时的变量就相当于是一个全局变量( 前提是没有局部变量和当前变量重名 )

如果添加声明变量的关键字,则他就是一个局部变量

let str = '我应该在车底,不应该在车里';

function du(){
    var str1 = '爱情不是你想卖';
    console.log(str);
    str2 = '你为何想着别人';  //全局变量
}
du();  //我应该在车底,不应该在车里

//全局不能访问局部变量
//console.log(str1);  //报错
console.log(str2);  //你为何想着别人
//全局变量和全局函数 实质上都是声明在 window对象上的属性和方法
console.log(window.str2);  //你为何想着别人

函数内部变量的 就近原则:在函数内部会优先选择这个作用域内部的变量,如果当前作用域中没有该变量,就会去他上一级作用域去寻找。以此类推,直到全局作用域中,如果作用域没有该变量,则抛出错误

function run(){
    let str = '你身上有她的香水味';
    function see(){
        let str = '后来,我总算学会了如何去爱';
        console.log(str);
    }
    see();
}
run();  //后来,我总算学会了如何去爱

如果有多个script标签,则会按照浏览器的解析方式,下面的script中可以使用 上面的script 的全局变量和全局函数,然而在 上面的script不能使用 下面的变量和方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值