浅谈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 相关文章推荐
JS.getTextContent(element,preformatted)使用介绍
Sep 21 Javascript
js获取指定日期周数以及星期几的小例子
Jun 27 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
Jul 17 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
Feb 25 Javascript
用JavaScript实现让浏览器停止载入页面的方法
Jan 19 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
Jun 16 Javascript
vue2.0移除或更改的一些东西(移除index key)
Aug 28 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
Jun 10 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
Aug 01 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
Jan 14 Javascript
如何利用JavaScript编写更好的条件语句详解
Aug 10 Javascript
node.js如何操作MySQL数据库
Oct 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
php 错误处理经验分享
2011/10/11 PHP
php生成随机数的三种方法
2014/09/10 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
JavaScript事件 "事件对象"的注意要点
2016/01/14 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
Python中random模块生成随机数详解
2016/03/10 Python
python+django快速实现文件上传
2016/10/24 Python
解决Python requests 报错方法集锦
2017/03/19 Python
python字符串Intern机制详解
2019/07/01 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
为您的家、后院、车库等在线购物:Spreetail
2019/06/17 全球购物
校庆标语集锦
2014/06/25 职场文书
教师工作证明范本
2015/06/12 职场文书
从事会计工作年限证明
2015/06/23 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
德劲DE1102数字调谐收音机机评
2022/04/07 无线电