浅谈JavaScript的函数及作用域


Posted in Javascript onDecember 30, 2016

函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容。

(一)JavaScript函数

JavaScript函数是指一个特定代码块,可能包含多条语句,可以通过名字来供其他语句调用以执行函数包含的代码语句。

1.JavaScript创建函数的方法有两种:

函数声明:

function funcDeclaration(){ return 'A is a function'; }

函数表达式:

var funExpression=function(){ return 'A is a function '; }

上述函数声明和函数表达式的区别(注明:翻译自:不同的方式来写一个函数)在:

JavaScript解析器中存在一种变量声明被提升(hosting)的机制,也就是说变量(函数)的声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面。

例如以下代码段:

alert(foo); // function foo() {}
alert(bar); // undefined
function foo() {}
var bar = function bar_fn() {};
alert(foo); // function foo() {}
alert(bar); // function bar_fn() {}

输出结果分别是function foo() {} 、undefined 、function foo() {} 和function bar_fn() {} 。

可以看到foo 的声明写在alert之后,仍然可以被正确调用,因为JavaScript解释器会将其提升到alert前面,而以函数表达式创建的函数bar则不享受此待遇。

所以,JavaScript 引擎执行以上代码的顺序可能是这样的:

  • 创建变量foo和 bar,并将它们都赋值为undefined。
  • 创建函数 foo 的函数体,并将其赋值给变量foo。
  • 执行前面的两个 alert。
  • 创建函数 bar_fn ,并将其赋值给 bar。
  • 执行后面的两个 alert。

2.函数的参数

在调用函数时,你可以向其传递值,这些值被称为参数。

function printName(name){
  console.log(name);
}
printName('Byron');
printName('Casper);

其中name是形参,'Byron'和'Casper'是实参。

说到函数的参数,我们不得不提到arguments。此处涉及的内容有点多,请看客们参考楼主之前转载的javascript arguments。

3.函数重载

重载是很多面向对象语言实现多态性的手段之一,在静态语言中确定一个函数的手段是靠方法签名--函数名+参数列表,也就是说相同名字的函数参数个数不同或者顺序不同都被认为是不同的函数,成为函数重载。

在JavaScript中没有函数重载的概念,函数通过名字确定唯一性,参数不同也被认为是相同的函数,后面的覆盖前面的。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript 面向对象全新理练之原型继承
Dec 03 Javascript
在JavaScript中监听IME键盘输入事件
May 29 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
Apr 21 Javascript
js中的referrer返回上一页使用介绍
Sep 26 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
Oct 16 Javascript
学习JavaScript设计模式(单例模式)
Nov 26 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
Dec 25 Javascript
Javascript三种字符串连接方式及性能比较
May 28 Javascript
JS FormData对象使用方法实例详解
Feb 12 Javascript
Node.js 深度调试方法解析
Jul 28 Javascript
让Vue响应Map或Set的变化操作
Nov 11 Javascript
webpack4从0搭建组件库的实现
Nov 29 Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 #Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 #Javascript
浅谈js script标签中的预解析
Dec 30 #Javascript
jQuery实现页面顶部下拉广告
Dec 30 #Javascript
jQuery Password Validation密码验证
Dec 30 #Javascript
JS编写函数实现对身份证号码最后一位的验证功能
Dec 29 #Javascript
EasyUI学习之Combobox下拉列表(1)
Dec 29 #Javascript
You might like
linux iconv方法的使用
2011/10/01 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python显示天气预报
2014/03/02 Python
python中zip和unzip数据的方法
2015/05/27 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
药物学专业学生的自我评价
2013/10/27 职场文书
门诊挂号室室长岗位职责
2013/11/27 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
导游欢迎词范文
2015/01/23 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle