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 相关文章推荐
javascript与有限状态机详解
May 08 Javascript
Javascript 实现图片无缝滚动
Dec 19 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
Nov 05 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
基于jquery实现简单的分页控件
Mar 17 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
Sep 23 Javascript
关于javascript事件响应的基础语法总结(必看篇)
Dec 26 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
Sep 29 Javascript
JavaScript数组排序小程序实现解析
Jan 13 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
模拟flock实现文件锁定
2007/02/14 PHP
PHP session有效期session.gc_maxlifetime
2011/04/20 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
php查询及多条件查询
2017/02/26 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
jquery提示 &quot;object expected&quot;的解决方法
2009/12/13 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
大客户销售经理职责
2013/12/04 职场文书
家教广告词
2014/03/19 职场文书
投标保密承诺书
2014/05/19 职场文书
学校读书活动总结
2014/06/30 职场文书
mysql创建存储过程及函数详解
2021/12/04 MySQL
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python