还是先上一段代码,思考一下执行的结果。
<script>
var str = 'outer';
function test1(){
alert(str);
};
function test2(){
alert(str);
var str = 'inner';
};
function test3(){
var str = 'inner';
alert(str);
};
function test4(){
alert(strInfo);
};
test1();
test2();
test3();
test4();
</script>
有了前面关于作用域的相关知识,这里的问题应该很容易回答了。
分别打印出:
- outer
- undefined
- inner
- js脚本错误:strInfo未定义。
test1很简单,使用了全局变量str,所以,肯定打印出全局变量对应的值:outer。
test3很简单,函数中重新定义了str,所以打印出局部变量对应的值:inner。
test4很简单,从来没有定义过strInfo,直接引用的话,会报js脚本错误。
重点说一下test2。很多人认为,test2按道理,就比test1多了一行,应该打印出outer,然后,对str重新赋值。如果你也这样想,就错了。说明,对变量的作用域还不是很了解。
上面的代码,一共是4个作用域:全局作用域、test1的作用域、test2的作用域和test3的作用域。test2中的代码其实是下面这样的
function test2(){
var str;
alert(str);
str = 'inner';
};
这样一看,大家应该明白了吧。在定义test2的时候,编译器会查找在这个作用域中是否有var关键字,如果有,则在作用域的最顶端事先声明;如果没有,就会到test2的上一层作用域中进行查找,如果找到了,就显示相应的数值(这其实就是test1的情况),如果没有就再向上一层找,知道全局作用域。如果全局作用域也没有,就会报脚本错误(这其实就是test4的情况)。
分享到:
相关推荐
javascript学习笔记发放2。这章我们 继续.然后了解下js中操作数据 和 函数的 作用域。
每个写过程序的人都不会对作用域这个概念陌生,那在这篇文章中就来谈下Javascript的作用域。
这是一份关于JavaScript ES6 的整理笔记,包括块级作用域,解构,promise,class,proxy
//声明,并且赋值,即定义了 下面是几点总结: 变量的作用域:全局的和局部的。(注意:如果尝试读取一个未声明的变量的值,javascript会生成一个错误) 第一点:在都使用var关键字修饰变量的情况下,如果给一个局部...
前篇文章我们介绍了学习javascript所需要的基础中的基础知识,今天我们来更进一步,学习下javascript变量及其作用域,希望小伙伴们通过本文能够有所得。
在之前的介绍中,我们已经知道 Javascript 没有块级作用,只有函数级作用域。 代码如下: function test() { // a scope for(var i = 0; i < 10; i++) { // not a scope // count } console.log(i); // ...
在C和Java中,都有一个程序的入口函数或方法,即main函数或main方法。而在JavaScript中,程序是从JS源文件的头部...具体来说,在执行流程进入函数时会建立一个新的作用域,在函数执行完成退出时会销毁这个作用域。函
-_-||| 作用域 JS中只存在一种作用域—-公用作用域,所有对象的所有属性和方法是公用的。许多开发者都在网上提出了有效的属性作用域模式,解决了ECMAScript的这种问题。由于缺少私有作用域,开发者们制定了一个规约...
主要介绍了JS页面获取 session 值,作用域和闭包,结合具体实例形式分析了javascript与jsp交互获取session值、函数作用域及闭包相关操作技巧,需要的朋友可以参考下
高级函数 1.1 作用域安全的构造函数 ①直接调用构造函数而不适用new操作符时,由于this对象的晚绑定,它将映射在全局对象window上,导致对象属性错误增加到window。 代码如下: function Person(name,age,job){ this....
本文主要讲述了javascript中作用域和命名空间的区别,十分的详细,这里推荐给大家,希望小伙伴能有所收获
基础篇 Javascript学习笔记1 数据类型 Javascript学习笔记2 函数 Javascript学习笔记3 作用域 Javascript学习笔记4 Eval函数 Javascript学习笔记5 类和对象 Javascript学习笔记6 prototype的提出 Javascript学习...
一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 代码如下: var n=999;...
一.关于Javascript变量声明 在Javascript中,声明一个变量 var a=1; 也可以直接 a=1; 这两种表达是有区别的, 一个是当前作用域的局部变量,另一个则是当前作用域的全局变量;... // error 二.Javascript变量作用域
javascript从入门到跑路—–小文的js学习笔记(1)———script、alert、document。write() 和 console.log 标签 … … javascript从入门到跑路—–小文的js学习笔记目录 ** 在说函数前,补充一个函数的作用域的知识...
面向对象的 javascript 学习 大家好,根据我的学习...引用,函数重载和类型检查,作用域,图解prototype和constructor, 闭包,上下文,公共方法和私有方法,公共变量私有变量,特权方法,静态方法,命名空间,编码建议
JavaScript的函数是基于词法作用域的顶级对象。Javascript是第一个成为主流的Lambda语言。相对于Java而言,JavaScript于Lisp和Scheme有更多的共同点。它是披着C外衣的Lisp。这使得JavaScript成为一个非常强大的语言...