JavaScript 函数的定义-调用、注意事项


Posted in Javascript onApril 16, 2017

函数定义

函数语句定义

function(a,b){
 return a+b; 
}

表达式定义

var add = function(a,b){return a+b};

//函数表达式可以包含名称,这在递归时很有用 var f = function fact(x){ if(x<=1) {return 1; }else { return x*faxt(x-1); } }

以表达式方式定义的函数,函数的名称是可选的。如果函数定义表达式包含名称,函数的局部作用域将会包含一个绑定到函数对象的名称,实际上,函数的名称将成为函数内部的一个局部变量

函数命名规范

1.like_this()第一个字符为小写,当包含多个单词时候,单词以下划线分割

2.likeThis()第一个字符为小写,当包含多个单词时候,除第一个单词以外的单词首字母使用大学字母

3.内部函数或私有函数,通常以一条下划线为前缀

注:函数声明语句‘被提前到外部脚本或外部函数作用于顶部,所以可以被在它定义之前出现的代码所调用

以表达式方式定义函数前必须把它赋值给一个变量。所以表达式方式定义的函数在定义之前是无法调用的

函数返回值

  • return语句返回函数的值给调用者。
  • return语句没有,则它返回undefined

 嵌套函数

  • 嵌套函数可以访问他们的函数的参数和变量
  • 但是嵌套函数不能出现在循环、条件判断,或者try/cache/finally/with语句中

函数调用

  • 作为函数
  • 作为方法
  • 作为构造函数
  • 通过他们的call()和apply()方法间接调用

作为函数调用

add(1,2)

 根据ECMAScript3和非严格的ECMAScript5对函数调用的规定,调用上下文(this的值)是全局对象。然而在严格模式下,调用上下文则是undefined。

//定义一个函数且调用一个函数来确定当前脚本运行是否为严格模式
 var strict = (function(){return this;}());

作为方法调用

var o = {
 m:1,
 n:2,
 add:function(){
  this.result = this.m+this.n;
  }
}

方法调用和函数调用的一个重大区别。----调用上下文

o.add() add的调用上下文为o,即:this
o.add() 等同于o['add']()
方法链:当方法并不需要返回值时候,最好直接返回this
this为一个关键字,不是变量,也不是属性名。JavaScript语法不允许给this赋值
和变量不同,关键字this没有作用于的限制,嵌套的函数不会从调用它的函数中继承this,如果想访问外部函数的this,var self= this;保存在变量中
如果嵌套函数作为函数调用,其this的值指向调用它的对象。如果作为函数调用,this不是全局对象(非严格模式),就是undefined(严格模式)

构造函数调用

var o = new Object();

构造函数调用和普通函数调用以及方法调用在实参处理。调用上下文和返回值等方面都有不同。

凡是没有形参的构造函数调用都可以省略圆括号。

var o = new Object();
var o = new Object;
//等价

构造函数调用创建一个新的空对象,这个对象继承自构造函数的prototype属性,这个函数试图初始化这个新创建的对象,病将这个对象做为上下文,因此构造函数可以使用this关键字来引用这个新创建的对象。

new o.m() 调用的上下文并不是o.
构造函数并不使用return。如果构造函数显示的使用return语句返回一个对象,那么调用表达式的值就是这个对象。如果构造函数但并没有返回值,或者返回一个原始值,那么就会忽略返回值,同时使用新对象作为返回结果。

间接调用

call()
appy()

Javascript 相关文章推荐
正则表达式语法
Oct 09 Javascript
Jquery异步请求数据实例代码
Dec 28 Javascript
javascript 常用功能总结
Mar 18 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
Mar 10 Javascript
jQuery制作效果超棒的手风琴折叠菜单
Apr 03 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
Nov 09 jQuery
JS排序算法之希尔排序与快速排序实现方法
Dec 12 Javascript
Nuxt.js实战详解
Jan 18 Javascript
js尾调用优化的实现
May 23 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
Feb 11 Javascript
AngularJS双向绑定和依赖反转实例详解
Apr 15 #Javascript
JavaScript简单计算人的年龄示例
Apr 15 #Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
Apr 14 #Javascript
微信小程序动态的加载数据实例代码
Apr 14 #Javascript
JAVA中截取字符串substring用法详解
Apr 14 #Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
Apr 14 #jQuery
JavaScript实现的选择排序算法实例分析
Apr 14 #Javascript
You might like
我的php学习笔记(毕业设计)
2012/02/21 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
Python笔记(叁)继续学习
2012/10/24 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
Python如何实现邮件功能
2020/05/27 Python
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
汽车技术服务英文求职信范文
2014/01/02 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
幼儿园家长会邀请函
2014/01/15 职场文书
cf战队收人口号
2014/06/21 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
暂住证明怎么写
2015/06/19 职场文书
职工培训工作总结
2015/08/10 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
mysql 排序失效
2022/05/20 MySQL
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python