学习javascript基础知识系列第三节 - ()()用法
注意:
为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示。
由于代码中使用了console.log或dir方法,因此如果在ie中执行,请自行替换为alert或注释掉。
第三节 - ()()用法
在JS中,有一种特殊的写法,就是两个小括号,如下(代码一):
(function(){
console.log("执行");
})();
这段代码会在页面加载的时候直接执行,在控制台输出“执行”。
这段代码的等价代码为(代码二):
function Run(){
console.log("执行");
}
Run();
就是创建了一个函数,然后执行。代码一还有另外一种形式(代码三):
(function(){
console.log("执行");
}());
代码三和代码一的差别就在最后一对小括号写在里面或者外面,效果是一样的。
在上一节中,讲解了this的用法,而在()()和this同时出现时,如果不了解本质,我们可能还会分不清this的指向,
这里举几个例子说明this在()()中的判断。
下面这段代码(代码四)是在代码一的基础上增加了this.blog = "isea533"。
(function(){
this.blog = "isea533";
console.log("执行");
})();
这段代码执行之后,我们可以在console中输入blog查看,结果为“isea533",
这就说明了this是指向全局的。按照我们上一节的来讲,同时看这段代码的等价代码二,
我们可以知道这段代码其实就是作为函数执行的,所以this在这里就是window对象。
再看一种稍微复杂的情况(代码五):
function Five(){
var blog = "isea533";
this.blog = "isea";
(function(){
console.log(blog);
console.log(this.blog);
})();
}
对这段代码,有两种执行方式,一种作为函数执行,一种作为构造函数执行,这两种情况的结果是不一样的。
我们先按函数执行Five();
我们可以看到两个blog都输出了。我们再看另一种情况:
这里可以看到blog输出了,this.blog为undefined,这就说明了在Five对象中的()()方法里面,this仍然是指向全局的。
第一种情况的时候,应为Five()为函数执行,所以创建了全局变量blog,所以执行的时候能够输出Isea,
而第二种情况时,由于是构造函数,所以this.blog="isea"并没有执行,因而下面执行的时候,是没有定义的。
我们可以将Five方法按照代码二的形式进行改造,如下(代码六):
function Five(){
var blog = "isea533";
this.blog = "isea";
function run(){
console.log(blog);
console.log(this.blog);
}
run();
}
这里的run也是仅仅作为函数执行的,所以指向的是全局变量。
我们在看一种情况,当函数作为对象的方法执行的时候(代码七):
function Five(){
var blog = "isea533";
this.blog = "isea";
this.run = function(){
console.log(blog);
console.dir(this);
console.log(this.blog);
}
this.run();
}
当我们执行var f = new Five();时,输出结果如下图:
我在这儿用dir输出了this的结构,可以看到this指向的当前的对象,blog和this.blog都输出了,
这里的blog是局部对象,this.blog是当前对象的一个属性,所以都会正常输出。
看到这里,如果你还够清醒,我们继续往下看看两种简单的使用方式。
第一种,带参数的()(),如下代码(代码八):
(function(blog){
console.log("Hello "+blog);
})("isea533");
function有一个参数blog,我们在第二个括号 ()("isea533") 传入了参数。
第二种,带返回值的()(),如下代码(代码九):
var result = (function(blog){
var a = 4,
b = 6;
return a+b;
})();
这段代码执行后,result = 10;
第二种情况,在稍加复杂后,如下代码(代码十):
var result = (function(blog){
function Five(){
var blog = "isea533";
this.blog = "isea";
this.run = function(){
console.log(blog);
console.log(this.blog);
}
}
return new Five();
})();
返回的result为Five对象的实例。
上述内容为个人理解,如果有错误的地方,希望可以指正。
参考内容:
JavaScript 两个小括号 ()() 对执行上下文的影响
学习javascript基础知识系列第三节 - ()()用法的更多相关文章
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- JavaScript学习---JavaScript基础知识
JavaScript的引入方式 JavaScript的引入方式: 1.直接在script里面写: 2.使用<script src="JS的文件位置"> {#1 直接编写 ...
- C# 基础知识系列- 9 字符串的更多用法(一)
0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
- 一步步学习javascript基础篇(3):Object、Function等引用类型
我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...
- Javascript基础知识总结一
Javascript基础知识总结一 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...
- 【javascript基础】系列
这是本人记录的javascript基础知识,希望能给大家的学习带来一点帮助. [javascript基础]1.基本概念 [javascript基础]2.函数 [javascript基础]3.变量和作用 ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- 基础知识系列☞Abstract和Virtual→及相关知识
转载地址→http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html 在C#的学习中,容易混淆virtual方法和abstract方法的 ...
随机推荐
- Bubble Sort 冒泡排序
//Bubble Sort ( O(n²)) public class TestBubbleSort { public int[] bubbleSortArray(int[] arr){ ; i &l ...
- 浅谈c语言程序为什么需要内存 栈又是什么?
.关于内存(程序的执行需要内存的支持) ()内存本身在物理上是硬件器件,由操作系统提供 ()内存的管理最终由操作系统统一管理.为了能过便捷的管理内存(酒店管理房间 是不是分很多不同的类型和待遇呢),同 ...
- <php>文件操作*(重要)
//touch("./3.txt");//创建文件:在当前目录下创建3.txt文件 //copy("./3.txt","./touxiang/5.ph ...
- 关于css3的rgba
在rgba之前,我们应该知道rgb.它就是红色R+绿色G+蓝色B.那rgba是什么?简单的说就是在rgb的基础之上加上一个通道alpha.他的语法如下: r 红色值.正整数(0~255) | 百 ...
- gulp入门学习实例
好久都没有更新博客了,每天繁忙的工作,下班之后都不想开设备了.前段时间有幸学习了一下gulp这款构建工具,现在和大家分享一下. 为什么使用Gulp Gulp基于Node.js的前端构建工具,通过Gul ...
- Mac_配置adb环境变量
1.打开终端Terminal. 2.进入HOME目录:命令行输入 echo(这之间有一个空格) $HOME 3.创建.bash_profile文件:命令行输入 touch(这之间有一个空格).bash ...
- 最简单轻便 的 sqlserver安装方式
网上有很多版本高的sqlserver 下下来就超级费劲 ,所以特意的想了个办法 ,就省时间 最高效率的安装 需要两个软件 我们假定安装 sqlserver 2005 1.SQLEXPR32_CHS ...
- OD调试9—实例:深入分析代码完成软件破解
OD调试9—实例:深入分析代码完成软件破解 爆破,是最初级的解决方案,不到万不得已,我们不直接修改JNZ通关.因为这样子的话,我们就享受不到破解.逆向的真正乐趣了. 了解程序背后按照剧情发展经常会出 ...
- WCF入门教程系列五
一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 描述: 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务 ...
- (搬运工)国内顺利使用Google的另类技巧
在特殊的地方和特殊的时间,流畅顺利使用Google的方法也会变得很特殊.分享一些奇葩的Google使用方法,通过下列网址也可以使用Google来搜索:http://www.GoogleStable.c ...