在html中script块变量中的作用域,Javascript中的作用域及块级作用域_而已_前端开发者...

一、块级作用域的说明

在学习JavaScript的变量作用域之前,我们应当明确几点:

a、JavaScript的变量作用域是基于其特有的作用域链的。

b、JavaScript没有块级作用域。

c、函数中声明的变量在整个

javascript的

static void Main(string[] args)

{

if(true)

{

int number=10;

}

Console.WriteLine(number);

}

这段代码进行编译,是无法通过的,因为”当前上下文不存在number”.

因为这里

在块级作用域下,所有的

if(true)

{

int number=10;

Console.WriteLine(number);

}

这样可以访问,因为

但是在javascript中没有块级作用域的概念。

二、javascript中的作用域

1、

在javascript中,

var num=function()

{

var number=10;

};

try{

alert(number);

}catch(e)

{

alert(e);

}

代码运行时,会抛出一个异常,

var num=function(){

alert(number);

var number=10;

alert(number);

};

try{

num();

}catch(e){

alert(e);

}

这段代码运行后,不会抛出错误,弹出两次,分别是undefined和10

2.子域访问父域

函数可以限定变量的作用域,那么在函数中的函数就为该作用域的子域,在子域中的代码可以访问到父域中的变量,代码如下:

var func=function(){

var number=10;

var sub_func=function(){

alert(num);

};

sub_func();

};

func();

这段代码执行得到的结果是10,但是在子域中访问父域的代码也是有条件的

var func=function(){

var number=10;

var sub_func=function(){

var num=20;

alert(num);

};

sub_func();

};

func();

这段代码比前面多了一个”var num=20;”,这句代码在子域中,那么子域访问父域的情况就发生了变化,这段代码打印的结果是20,此时子域访问的num是子域中的变量,而不是父域中的。由此可见访问有一定规则可言,在javascript中使用变量,javascript解释器首先在当前作用域中搜索是否有该变量的定义,如果有,就是用这个变量,如果没有就到父域中寻找变量,依次类推,直到最顶级作用域,仍然没有找到就抛出异常”变量未定义”,代码如下:

(function (){

var num=10;

(function (){

var num=20;

(function(){

alert(num);

})();

})();

})();

这段代码执行后打印出20,如果将”var num=20“取掉,那么打印的就是10.同样去掉”var num=10“,那么就会出现未定义的错误。

下面介绍下

作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。讲到这里,首先理解两个概念:块级作用域与函数作用域。

什么是块级作用域呢?

任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。

函数作用域就好理解了(*^__^*) ,定义在函数中的参数和变量在函数外部是不可见的。

大多数类C语言都拥有块级作用域,

//C语言

#include

void main()

{

int i=2;

i--;

if(i)

{

int j=3;

}

printf("%d/n",j);

}

运行这段代码,会出现“use an undefined variable:j”的错误。可以看到,C语言拥有块级作用域,因为j是在if的语句块中定义的,因此,它在块外是无法访问的。

functin test(){

for(var i=0;i<3;i++){

}

alert(i);

}

test();

运行这段代码,弹出”3″,可见,在块外,块中定义的变量i仍然是可以访问的。也就是说,

那么我们该如何使

function test(){

(function (){

for(var i=0;i<4;i++){

}

})();

alert(i);

}

test();

这时候再次运行,会弹出”i”未定义的错误,哈哈,实现了吧~~~这里,我们把for语句块放到了一个闭包之中,然后调用这个函数,当函数调用完毕,变量i自动销毁,因此,我们在块外便无法访问了。

(function (){

//内容

})();

总结

以上所述是小编给大家介绍的Javascript中的作用域及块级作用域,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对前端开发者网站的支持!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值