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 相关文章推荐
js局部刷新页面时间具体实现
Jul 04 Javascript
用Jquery实现滚动新闻
Feb 12 Javascript
浅谈js中的三种继承方式及其优缺点
Aug 10 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
Nov 25 Javascript
vue.js获取数据库数据实例代码
May 26 Javascript
详解AngularJS之$window窗口对象
Jan 17 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
vue下拉列表功能实例代码
Apr 08 Javascript
vue+egg+jwt实现登录验证的示例代码
May 18 Javascript
Vue 无限滚动加载指令实现方法
May 28 Javascript
微信小程序 确认框的实现(附代码)
Jul 23 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 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学习资料汇总与网址
2007/03/16 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
javascript读取RSS数据
2007/01/20 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
Python 字符串换行的多种方式
2018/09/06 Python
Python编写打字训练小程序
2019/09/26 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
python实现拼图小游戏
2020/02/22 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
服务员岗位责任制
2014/02/11 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android