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.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 Javascript
jQuery总体架构的理解分析
Mar 07 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
Dec 03 Javascript
node.js实现逐行读取文件内容的代码
Jun 27 Javascript
JQuery遍历元素的父辈和祖先的方法
Sep 18 Javascript
实例解析jQuery中如何取消后续执行内容
Dec 01 Javascript
在javaScript中检测数据类型的几种方式小结
Mar 04 Javascript
AngularJS的$location使用方法详解
Oct 19 Javascript
Vue实现购物车场景下的应用
Nov 27 Javascript
详解webpack+ES6+Sass搭建多页面应用
Nov 05 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 Javascript
javascript遍历对象的五种方式实例代码
Oct 24 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新手上路(七)
2006/10/09 PHP
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
php微信开发之关注事件
2018/06/14 PHP
PHP 实现缩略图
2021/03/09 PHP
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
vue实现分页栏效果
2019/06/28 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
工程资料员岗位职责
2014/03/10 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
机电一体化专业求职信
2014/07/22 职场文书
技术员岗位职责范本
2015/04/11 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python