`
lib
  • 浏览: 133504 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JavaScript的作用域(学习笔记一)

阅读更多

 

<script>
        var test1 = 'Just a test!'; 
	function test1(x){ 
		return x*x; 
	};
	alert(test1);  
	alert(test1(3));

	var test2 = 'Just another test!'; 
	var test2 = function(x){ 
		return x*x; 
	};
	alert(test2(5)); 
	alert(test2);
</script>

 

 先看一下上面这段代码,4个alert分别会打印出什么?

 下面给出答案:

 

  1.  alert(test1)打印出“Just a test!”
  2.  alert(test1(3))无法正确执行,直接报js脚本错误:缺少函数
  3.  alert(test2(5))打印出:“25”
  4.  alert(test2)打印出:function(x){return x*x;}
1、首先分析一下test1。众所周知,JavaScript的执行不是从上到下顺序执行的,而是先找到定义变量的语句首先执行,当把所有的定义语句都执行完之后,在按照顺序执行剩余的语句。所以,对于test1来说,虽然代码片段(1)
function test1(x){ 
	return x*x; 
};
 在代码片段(2)
var test1 = 'Just a test!'; 
 之后书写,但是,js在编译的时候,代码片段(1)是定义语句,则首先执行,然后,执行代码片段(2)。由于代码片段(2)的变量名称与代码片段(1)的变量名称相同,对test1进行的覆盖,test1就由第一次定义的函数变成了一个字符串。所以,打印的结果就是上面给出的前两个答案;

2、再来分析一下test2。按照刚才讲解的JavaScript的执行顺序,应该能够很清楚的知道打印出的结果了。但是,有人又提出了一个问题,看下面的代码片段
//方式一
function test2(x){
        return x*x; 
}

//方式二
var test2 = function(x){ 
	return x*x; 
};
 

方式一和方式二有什么区别吗?不都是定义了一个叫test2的函数吗?单就这方面来看,确实没有什么区别,但是,方式一是“定义式”的,方式二是“赋值式”的,放到整个上下文中,就会对执行的顺序产生影响。所以,这个细节一定要注意啊!

分享到:
评论

相关推荐

    javascript学习笔记发放2

    javascript学习笔记发放2。这章我们 继续.然后了解下js中操作数据 和 函数的 作用域。

    Javascript学习笔记3 作用域

    在Javascript,全局环境本身就一个对象。... 言归正传,当我们写下:var i=1时,其实就是声明了一个window作用域的一个变量。 而当我们写下i=1时,是声明了一个window的属性。 看这样一段代码: [Ctrl+A 全选 注:

    ES6 学习笔记.pdf

    这是一份关于JavaScript ES6 的整理笔记,包括块级作用域,解构,promise,class,proxy

    javascript权威指南 学习笔记之变量作用域分享

    //声明,并且赋值,即定义了 下面是几点总结: 变量的作用域:全局的和局部的。(注意:如果尝试读取一个未声明的变量的值,javascript会生成一个错误) 第一点:在都使用var关键字修饰变量的情况下,如果给一个局部...

    Javascript学习笔记之函数篇(六) : 作用域与命名空间

    在之前的介绍中,我们已经知道 Javascript 没有块级作用,只有函数...每一次引用一个变量时,Javascript 会往上遍历整个全局作用域直到找到该变量。如果遍历完整个全局作用域仍然没有找到该变量,则抛出一个 Reference

    JavaScript 学习笔记之变量及其作用域

    前篇文章我们介绍了学习javascript所需要的基础中的基础知识,今天我们来更进一步,学习下javascript变量及其作用域,希望小伙伴们通过本文能够有所得。

    JavaScript 学习笔记(五)

    -_-||| 作用域 JS中只存在一种作用域—-公用作用域,所有对象的所有属性和方法是公用的。许多开发者都在网上提出了有效的属性作用域模式,解决了ECMAScript的这种问题。由于缺少私有作用域,开发者们制定了一个规约...

    JS页面获取 session 值,作用域和闭包学习笔记

    主要介绍了JS页面获取 session 值,作用域和闭包,结合具体实例形式分析了javascript与jsp交互获取session值、函数作用域及闭包相关操作技巧,需要的朋友可以参考下

    JavaScript学习笔记(三):JavaScript也有入口Main函数

    在C和Java中,都有一个程序的入口函数或方法,即main函数或main方法。而在JavaScript中,程序是从JS源文件的头部...具体来说,在执行流程进入函数时会建立一个新的作用域,在函数执行完成退出时会销毁这个作用域。函

    JavaScript高级程序设计 学习笔记 js高级技巧

    高级函数 1.1 作用域安全的构造函数 ①直接调用构造函数而不适用new操作符时,由于this对象的晚绑定,它将映射在全局对象window上,导致对象属性错误增加到window。 代码如下: function Person(name,age,job){ this....

    Javascript学习笔记之函数篇(六) : &#65279;作用域与命名空间

    本文主要讲述了javascript中作用域和命名空间的区别,十分的详细,这里推荐给大家,希望小伙伴能有所收获

    Javascript学习笔记二 之 变量

    这两种表达是有区别的, 一个是当前作用域的局部变量,另一个则是当前作用域的全局变量; Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 代码如下: var n=999; function f1(){ alert&#40;n&#41...

    Javascript 读书笔记索引贴

    基础篇 Javascript学习笔记1 数据类型 Javascript学习笔记2 函数 Javascript学习笔记3 作用域 Javascript学习笔记4 Eval函数 Javascript学习笔记5 类和对象 Javascript学习笔记6 prototype的提出 Javascript学习...

    javascript从入门到跑路—–小文的js学习笔记(7)——–js函数

    javascript从入门到跑路—–小文的js学习笔记(1)———script、alert、document。write() 和 console.log 标签 … … javascript从入门到跑路—–小文的js学习笔记目录 ** 在说函数前,补充一个函数的作用域的知识...

    JavaScript 语言精粹学习笔记第1/2页

    JavaScript的函数是基于词法作用域的顶级对象。Javascript是第一个成为主流的Lambda语言。相对于Java而言,JavaScript于Lisp和Scheme有更多的共同点。它是披着C外衣的Lisp。这使得JavaScript成为一个非常强大的语言...

    面向对象javascript笔记

    面向对象的 javascript 学习 大家好,根据我的学习...引用,函数重载和类型检查,作用域,图解prototype和constructor, 闭包,上下文,公共方法和私有方法,公共变量私有变量,特权方法,静态方法,命名空间,编码建议

Global site tag (gtag.js) - Google Analytics