什么是局部作用域(块级作用域)

关于局部作用域(块级作用域)

学js的时候遇到的这个,记录一下

  • javascript里面没有块级作用域,php也没有
  • javac++是有块级作用域的

什么是块级作用域

  1. 有块级作用域 (java为例)
public static void main(String[] args) {

        int outer = 0;
    //以下是一个块级作用域
        for (int i = 0;i < 10;i++)
        {
            int inner = i;
            outer += inner;
        }
    //以上的部分(括号内和for)是一个块级作用域
        System.out.println(outer);
        System.out.println(inner);
        System.out.println(i);

    }

这个随便的代码(java代码)为例,这里的大括号内部就是一个块级作用域,在里面声明的变量外面不能用。就比如这段里,for循环结束了变量inner就没了
在大括号外调用这个inner将无法运行(编译器用的intelliJ)
图片效果

  1. 没有块级作用域 (js为例)
 for ( var i = 0 ; i < 4 ; i++){
        var inner = i;
    }
    document.write("inner is " + inner +"<br>");
    document.write("i is " + i);
//可以正常运行

在这里插入图片描述

^这是测试效果,是可以运行而不会报错的

  • 所以我们发现,js中一个函数里声明的变量在整个函数中都是可以访问的,这也是为什么js中有闭包来避免不必要的问题

一个js中相关的问题

es6中引入了let,也可以用来声明变量。
虽然js没有块级作用域,但是js中let是有块级作用域的
就比如:

	{
        var inner1 = 'yoyoyo';
        let inner2 = 'check it now'
    }
    console.log(inner1);
    console.log(inner2);

这个就会报错。
let的就会报错了


函数作用域和局部作用域 (js为例)

  • 在这里多一句嘴,函数作用域和局部作用域是不一样的。不管是有没有局部作用域(块作用域)的语言里,函数外部都是不能访问函数内部声明的变量的。
   var a = 'FUDAN';
   
   function testScope() {
   //会显示undefined,并不能访问到函数外的声明
    	document.write(a + '<br>');
        for(var i = 0 ; i < 4 ; i++){
             var a = i;
             var b = i;
        }
        //a可以调用,因为不存在块级作用域
       document.write("a is now " + a + "<br>");
   }
   
   testScope();
   //不会报错,但是访问到的是最前面函数外声明的变量值
   document.write(a + "<br>");
   //会报错,无法访问函数内部声明的变量b
   try { document.write(b)}
   catch (e) { document.write("oops! error occurred") }

^再次用js举一个例子
在这里插入图片描述
^效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值