javascript学习笔记_function
1、js的函数定义有3种形式
a) 函数定义表达
var f = function(x,y){return x+y;};
函数定义表达式,使用一个变量来存函数,在调用函数表达式时,必须已经定义好了函数。因为在js中变量的声明被提前但是变量的赋值不会提前。可以指定函数名也可以不指定。
b) 函数声明语句
function f(x,y){return x+y};
此种方式函数声明语句“被提前”到外部脚本或者外部函数作用域(该函数嵌套到外部函数时)的顶部,这种方式 可以在定义函数之前调用。
c) 使用Function构造函数
var f = new Function(“x”,”y”,”return x+y;”);
此种方式,Function构造函数最后一个参数是函数主体,前面的参数是函数的形参,允许javascript在运行时动态的创建并编译函数。而且它创建的函数不使用词法作用域,相反函数体的代码编译总在全局作用域执行,不建议采用此次方式。
d) 嵌套函数
在函数中定义另一个函数,(里层函数)嵌套函数可以访问嵌套它们的函数(外层函数)的参数和变量。
2、函数的调用
a) 做为函数,普通的函数进行调用。
b) 作为方法,函数作为对象的属性值。
c) 作为构造函数。
d) 通过call()或apply()方法间接调用,有点感觉像java的反射。
3、函数的实参和形参
a) 当调用函数时传入的实参比函数声明的形参少,剩下的形参都将设置为undefined,如果比声明的形参多的话,会忽略。在函数体内,标识符arguments指向实参对象的引用,实参对象是一个类数组对象,就算实参个数多于行参个数一样的可以访问到。
b) 除了数组元素,实参对象还定义了callee和caller属性,callee指代当前正在执行的函数,caller指代当前正在执行的函数的函数。
4、闭包
函数对象可以通过作用域链相互关联起来,函数体内部的变量可以保存在函数作用域内,这种特性被称为闭包。
我们将作用域链描述为一个对象列表,每次调用js函数,都会创建一个新的对象用来保存局部变量,把这个对象添加到作用域链中,当函数返回时,就从作用域链中将这个绑定变量的对象删除。但是如果这个函数定义了嵌套的函数,并将它作为返回值或者存储在某处的属性里,这时就会有一个外部的引用指向这个嵌套的函数,那这个外部函数的作用域绑定的变量对象就不会被当做垃圾回收,嵌套函数所指向的变量绑定对象也不会被当做垃圾回收。
总之,只要函数作为返回值或者保存在某处的属性中,那么外部函数的指向的变量绑定对象都不会被清空。
5、函数属性、方法、构造函数
a) length属性是函数定义时的形参个数,arguments.length(实际传入的实参个),arguments.callee.length(函数定义指定的形参个数)
b) prototype属性指向函数的原型对象,当函数用作构造函数时,新创建的对象会从原型对象上继承属性
c) call()方法和apply()方法
第一个参数都是,调用的上下文,call后面的参数对于函数的形参,apply,第二参数是数组存放参数。
d) bind()方法
将函数f()绑定到某对象o上f.bind(o),该方法返回一个新的函数,新函数的调用会把f原始函数当做对象o的方法来调用。传给新函数的任何实参都会传给原始函数。绑定的同时还可以传函数的实参,绑定的实参和新函数的调用传的实参和按从左到右传入。
javascript学习笔记_function相关推荐
- JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- JavaScript学习笔记(五)
JavaScript学习笔记(五) ①Array类 本地对象 ②Date类 ①Global对象 对象的类型 内置对象 ②Math对象 宿主对象 今天继续学习JS中的对象,昨天内置对象Global对 ...
- JavaScript学习笔记(备忘录)
JavaScript学习笔记(备忘录) ===运算符 判断数值和类型是否相等.如: console.log('s'==='s') //输出trueconsole.log('1'===1) //输出fa ...
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- JavaScript学习笔记(十)——学习心得与经验小结
JavaScript学习笔记(十)--学习心得与经验小结 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^ 转载于:https://www.cnblogs.com/mixer/archi ...
- JavaScript 学习笔记(1)
1. 何为 Jscript JScript 是一种解释型的.基于对象的脚本语言. 局限性: 1) 不能使用该语言来编写独立运行的应用程序 2) 没有对读写文件的内置 ...
- 前端获取div里面的标签_web前端教程JavaScript学习笔记DOM
web前端教程JavaScript学习笔记 DOM一DOM(Document Object Model): 文档对象模型 其实就是操作 html 中的标签的一些能力 我们可以操作哪些内容 获取一个元素 ...
最新文章
- 8大排序算法图文讲解转
- 调用discuz编辑器发布帖子显示html代码的解决办法
- Java初学者不可不知道知识点
- Windows update一直停留在正在检查更新,为什么
- WPS2012交叉引用技巧,word比wps这点强更新參考文献
- ylb:SQL 系统函数
- java httpclient 包_java实现http请求之HttpClient
- java钝化_session的活化与钝化 (转)
- python3基础教程[第一版] 中
- 系统重温Pandas笔记:(六)连接
- 在火狐浏览器里怎么看请求头
- PHP实现输入地址,获取当前位置的经纬度,$lng和$lat即为经纬度的返回值
- 苹果将30天无条件退还iPhone改为14天
- Linux中指令的前缀命令格式
- Sql学习04(11.23-11.24)
- python处理csv文件计算均值_读取CSV文件,计算平均值并打印所述平均值
- 亚商策略会|闪马智能乘势“价值重构”,分享智慧城市建设新思路
- java中获得词根的方法_分析在各大考纲词汇中同时拥有前缀后缀和词根的词(一)...
- python 选座位助手
- 《您的设计模式》(CBF4LIFE)之“状态模式”【整理】
热门文章
- PHP当作客户端访问连接另外一个socket的方法
- 【python基础】window下python安装及配置环境变量的方法教程
- java集合中中文排序_利用Collator和Collections.sort对list进行中文排序,注意与Arrays.sort的区别...
- scsi协议_存储协议有哪些类型?常见存储协议分析
- vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具
- python怎么筛选excel数据_【In Action】工具-2-用Excel三分钟才能完成的复杂筛选,python十秒完成...
- selenium java封装_selenium2.0的初步封装(java版本)
- Spring Boot笔记-利用Quartz进行定时任务,利用websocket推送到浏览器(界面为thymeleaf)
- Web前后端笔记-vue封装http请求添加signature及后端(Java)解析并验证
- 前端笔记-vue cli引入sementic-ui(sementic-ui-vue)