全局作用域、局部作用域、块级作用域

一.作用域

1.什么是作用域?

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

ES6 之前 JavaScript 没有块级作用域,只有全局作用域和函数作用域。ES6 的到来,为我们提供了‘块级作用域’,可通过新增命令 let和const 来体现。

2.全局作用域

在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:

1.所有未定义直接赋值的变量自动声明为拥有全局作用域

    function Fun1(){
        a ='直接赋值的变量';
        var b='内层变量'
    }
    Fun1();
    console.log(a);//直接赋值的变量
    console.log(b);//b is not defined

2.最外层函数和最外层函数外面定义的变量拥有全局作用域

    var A='最外层变量';//最外层函数
    
    function outFun(){//最外层函数
        var B ='最外层函数的内层变量'

        function innerFun(){//内层函数
            var C='内层函数的内部变量'
        }
    }
    console.log(A);//最外层变量
  outFun()
    innerFun()

3.window 对象的属性拥有全局作用域

let num =5

function fn1(){
    let num =10;
    console.log(num);

 function fn2(){
     let num = 30;
    console.log(num);
}
fn2()

}
fn1()

console.log(num);

3.局部作用域

用var声明的所有变量,都是函数的局部变量,具有局部作用域,即变量只能在函数内部使用,不能在外部使用。

function fun(){
    var sum = 0;
    console.log(sum);
}
fun()
console.log(sum);

4.块级作用域

ES6 可以使用let关键字或者const关键字来实现块级作用域。

letconst声明的变量只在letconst命令所在的代码块 {} 内有效,在 {} 之外不能访问。

function f1(){
  let n = 5;
  if(true){
    let n = 10;
  }
  console.log(n); // 5
}

5.匿名函数

匿名函数的几种形式

1.声明一个函数直接赋值

  function fn(){
        console.log('666');
    }

2.使用匿名函数表达式。将匿名函数,赋值给一个变量

var show = function(){

alert('hello');

};

3.show();执行匿名函数,自执行语法

  (function(){
        let  num=10
        console.log('111');
    })()

6.this指向

this是一个使用在作用域内部(块级作用域、函数作用域、全局作用域)的关键字。 this关键字是函数运行时自动生成的一个内部对象,只能在函数内部使用,总指向调用它的对象

      console.log(this);//window
       console.log(this === window);//true

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值