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 的方法重载效果
Aug 07 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
Oct 27 Javascript
js 表格隔行颜色
Dec 02 Javascript
jQuery动态添加 input type=file的实现代码
Jun 14 Javascript
JQuery的ON()方法支持的所有事件罗列
Feb 28 Javascript
js中substring和substr两者区别和使用方法
Nov 09 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
详解ES6中的代理模式——Proxy
Jan 08 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
Apr 26 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
Nov 15 Javascript
Webpack5正式发布,有哪些新特性
Oct 12 Javascript
5个实用的JavaScript新特性
Jun 16 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
让焦点自动跳转
2006/07/01 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
使用python实现链表操作
2018/01/26 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
python创造虚拟环境方法总结
2019/03/04 Python
tensorflow之并行读入数据详解
2020/02/05 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
python初步实现word2vec操作
2020/06/09 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
企业门卫岗位职责
2013/12/12 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
雷人标语集锦
2014/06/19 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python