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相关推荐

  1. JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  2. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  3. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...

  4. JavaScript学习笔记(五)

    JavaScript学习笔记(五) ①Array类 本地对象 ②Date类 ①Global对象 对象的类型   内置对象 ②Math对象 宿主对象 今天继续学习JS中的对象,昨天内置对象Global对 ...

  5. JavaScript学习笔记(备忘录)

    JavaScript学习笔记(备忘录) ===运算符 判断数值和类型是否相等.如: console.log('s'==='s') //输出trueconsole.log('1'===1) //输出fa ...

  6. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. JavaScript学习笔记(十)——学习心得与经验小结

    JavaScript学习笔记(十)--学习心得与经验小结 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^ 转载于:https://www.cnblogs.com/mixer/archi ...

  8. JavaScript 学习笔记(1)

    1.     何为 Jscript JScript 是一种解释型的.基于对象的脚本语言. 局限性: 1)        不能使用该语言来编写独立运行的应用程序 2)        没有对读写文件的内置 ...

  9. 前端获取div里面的标签_web前端教程JavaScript学习笔记DOM

    web前端教程JavaScript学习笔记 DOM一DOM(Document Object Model): 文档对象模型 其实就是操作 html 中的标签的一些能力 我们可以操作哪些内容 获取一个元素 ...

最新文章

  1. 8大排序算法图文讲解转
  2. 调用discuz编辑器发布帖子显示html代码的解决办法
  3. Java初学者不可不知道知识点
  4. Windows update一直停留在正在检查更新,为什么
  5. WPS2012交叉引用技巧,word比wps这点强更新參考文献
  6. ylb:SQL 系统函数
  7. java httpclient 包_java实现http请求之HttpClient
  8. java钝化_session的活化与钝化 (转)
  9. python3基础教程[第一版] 中
  10. 系统重温Pandas笔记:(六)连接
  11. 在火狐浏览器里怎么看请求头
  12. PHP实现输入地址,获取当前位置的经纬度,$lng和$lat即为经纬度的返回值
  13. 苹果将30天无条件退还iPhone改为14天
  14. Linux中指令的前缀命令格式
  15. Sql学习04(11.23-11.24)
  16. python处理csv文件计算均值_读取CSV文件,计算平均值并打印所述平均值
  17. 亚商策略会|闪马智能乘势“价值重构”,分享智慧城市建设新思路
  18. java中获得词根的方法_分析在各大考纲词汇中同时拥有前缀后缀和词根的词(一)...
  19. python 选座位助手
  20. 《您的设计模式》(CBF4LIFE)之“状态模式”【整理】

热门文章

  1. PHP当作客户端访问连接另外一个socket的方法
  2. 【python基础】window下python安装及配置环境变量的方法教程
  3. java集合中中文排序_利用Collator和Collections.sort对list进行中文排序,注意与Arrays.sort的区别...
  4. scsi协议_存储协议有哪些类型?常见存储协议分析
  5. vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具
  6. python怎么筛选excel数据_【In Action】工具-2-用Excel三分钟才能完成的复杂筛选,python十秒完成...
  7. selenium java封装_selenium2.0的初步封装(java版本)
  8. Spring Boot笔记-利用Quartz进行定时任务,利用websocket推送到浏览器(界面为thymeleaf)
  9. Web前后端笔记-vue封装http请求添加signature及后端(Java)解析并验证
  10. 前端笔记-vue cli引入sementic-ui(sementic-ui-vue)