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 相关文章推荐
java script编程起步(第三课)
Jan 10 Javascript
javascript面向对象的方式实现的弹出层效果代码
Jan 28 Javascript
js特殊字符过滤的示例代码
Mar 05 Javascript
使用jquery修改表单的提交地址基本思路
Jun 04 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
js验证真实姓名与身份证号是否匹配
Oct 13 Javascript
简单实现jQuery轮播效果
Aug 18 jQuery
react-native使用leanclound消息推送的方法
Aug 06 Javascript
layer弹出层父子页面事件相互调用方法
Aug 17 Javascript
node.js 模块和其下载资源的镜像设置的方法
Sep 06 Javascript
JavaScript高级程序设计之变量与作用域
Nov 17 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使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
Python脚本实现代码行数统计代码分享
2015/03/10 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
python 模拟登陆github的示例
2020/12/04 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
机关门卫岗位职责
2013/12/30 职场文书
初中语文教学反思
2014/02/02 职场文书
基层党支部整改方案
2014/10/25 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android