《JS权威指南学习总结--第8章 函数知识》
内容要点:
1.函数表达式定义后立即调用: var tensquared = ( function(x){ return x*x ;}(10) );
2.嵌套函数:
在JS里,函数可以嵌套在其他函数里。例如:
function hypotenuse(a,b){
function square(x){ return x*x;}
return Math.sqrt(square(a)+square(b));
}
嵌套函数的变量作用域规则:它们可以访问嵌套它们(或多重嵌套)的函数的参数的参数和变量。例如,在上面的代码中,内部函数aquare()可以读写外部函数hypotenuse()定义的参数a和b。
3.四种方式来调用JS函数
作为函数、作为方法、作为构造函数、通过它们的call()和apply()方法间接调用
4.定义并调用一个函数来确定当前脚本运行时是否为严格模式
var strict = ( function(){ return !this }());
5.方法调用和函数调用的一个重要的区别:
即:调用上下文。
属性访问表达式由两部分组成:一个对象(o)和属性名称(m)。在像这样的方法调用表达式里,对象o成为调用上下文,函数体可以使用关键字this引用对象。例如:
var calculator = { //对象直接量
operand1:1,
operand2:1,
add:function(){
//注意this关键字的用法,this指代当前对象
this.result = this.operand1 + this.operand2;
}
};
calculator.add(); //这个方法调用计算1+1结果
calculator.result //=> 2
方法和this关键字是面向对象编程范例的核心。任何函数只要作为方法调用,实际上都会传入一个隐式的实参---这个实参是一个对象,方法调用的母体就是这个对象。
通常来讲,基于那个对象的方法可以执行多种操作,方法调用的语法已经很清晰地表明了函数将基于一个对象进行操作。
6.方法链:
当方法的返回值是一个对象,这个对象还可以再调用它的方法。这种方法调用序列中(通常称为 "链" 或者 "级联")每次的调用结果都是另外一个表达式的组成部分。比如,基于jQuery库,
//找到所有的header,取得它们id的映射,转换为数组并它们进行排序
$(":header").map(function(){ return thsi.id }).get().sort();
当方法并不需要返回值时,最好直接返回this。
7.this关键字
this是一个关键字,不是变量,也不是属性名。JS语法不允许给this赋值。
和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。
如果嵌套函数作为方法调用,其this的值指向调用它的对象。如果嵌套函数作为函数调用,其this值不是全局对象(非严格模式下)就是undefined(严格模式下)。
很多人误以为调用函数时this会指向调用外层函数的上下文。如果你想访问这个外部函数的this值,需要将this的值保存在一个变量里,这个变量和内部函数都同在一个作用域内。通常使用变量self来保存this。
例如:
var o = { //对象o
m : function(){ //对象中的方法m()
var self = this; //将this的值保存至一个变量中
console.log( this ===0 ); //输出true,,this就是这个对象o
f(); //调用辅助函数f()
function f(){ //定义一个嵌套函数f()
console.log(this === 0); // "false":this的值是全局对象或undefined
console.log(self === 0); // "true":self指外部函数的this值
}
}
};
8.构造函数的调用:
如果构造函数没有形参,JS构造函数调用的语法是允许省略实参列表和圆括号的。凡是没有形参的构造函数调用都可以省略圆括号。比如,下面这两行代码就是等价的:
var o = new Object();
var o = new Object;
9."||"运算符
if(a ===undefined ) a = []; //如果未定义,则使用新数组
相等于 a = a || [];
需要注意的是,使用 "||"运算符代替if语句的前提是a必须预先声明,否则a=a||[]会报引用错误,在这个例子中a是作为形参传入的,相当于var a,即已经声明了a,所以这样用是没有问题的。
《JS权威指南学习总结--第8章 函数知识》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- Python json解析
#encoding: utf-8 ''' Author:Siukwan ''' import sys reload(sys) sys.setdefaultencoding('utf8') import ...
- Kattis - Fenwick Tree(树状数组区间更新单点求值)
Fenwick Tree Input The first line of input contains two integers NN, QQ, where 1≤N≤50000001≤N≤500000 ...
- readelf -s 命令‘symbol’名字显示不全
GCC编译出来的object(目标文件)getPon.o,在链接时(ld)报了一个错误说找不到一个函数(undefined reference to identifier devCtl_getEthe ...
- angular中的cookie读写
AngularJS中对cookie的操作封装了一个单独的模块,模块名为ngCookies,若想使用需在页面中先引入angular-cookies.js: <script src="js ...
- Spring 注解式Aop 入门
首先在spring配置文件中加上 xmlns:aop="http://www.springframework.org/schema/aop" http://www.springfr ...
- yarn的调度器
三种调度器 1.FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,等最前面的应用需求满足后再给下一个分配,以 ...
- 我理解的session和cookie
tomcat管理session 理解tomcat是如何生成session的. 当用户请求到web资源有request.getSession()这段代码的时候,request首先会对请求的url判读是否 ...
- <hdu - 1232> 畅通工程 并查集问题 (注意中的细节)
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 结题思路:因为题目是汉语的,那我就不解释题意了,要求的是最少建设的道路,我们可以用并查集来做这 ...
- js中访问action
jsp中 <a href="javascript:Excel();" class="easyui-linkbutton" plain="true ...
- 从键盘或文件中获取标准输入:read命令
文件的描述符和重定向 文件描述符是和文件的输入.输出相关联的非负整数,Linux内核(kernel)利用文件描述符(file descriptor)来访问文件.打开现存文件或新建文件时,内核会返回一个 ...