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 相关文章推荐
JsEasy简介 JsEasy是什么?与下载
Mar 07 Javascript
extjs 学习笔记 四 带分页的grid
Oct 20 Javascript
jquery入门—数据删除与隔行变色以及图片预览
Jan 07 Javascript
JavaScript改变CSS样式的方法汇总
May 07 Javascript
利用jquery实现瀑布流3种案例
Sep 18 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 Javascript
高性能的javascript之加载顺序与执行原理篇
Jan 14 Javascript
教你搭建按需加载的Vue组件库(小结)
Jul 29 Javascript
微信小程序如何连接Java后台
Aug 08 Javascript
简述Vue中容易被忽视的知识点
Dec 09 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
Jul 22 Javascript
element-ui点击查看大图的方法示例
Dec 14 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 图片上传实现代码 带详细注释
2010/04/29 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
PHP中list方法用法示例
2016/12/01 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Django模板语言 Tags使用详解
2019/09/09 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
个人优缺点自我评价
2014/01/27 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
学前班评语大全
2014/05/04 职场文书
运动会班级口号
2014/06/09 职场文书
家庭教育的心得体会
2014/09/01 职场文书
交通事故协议书范文
2014/10/23 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
无罪辩护词范文
2015/05/21 职场文书