浅谈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 27 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
遍历jquery对象的代码分享
Nov 02 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
微信小程序 教程之条件渲染
Oct 18 Javascript
jQuery删除当前节点元素
Dec 07 Javascript
ES6学习教程之模板字符串详解
Oct 09 Javascript
JS控制鼠标拒绝点击某一按钮的实例
Dec 29 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 Javascript
如何用Node写页面爬虫的工具集
Oct 26 Javascript
vue select 获取value和lable操作
Aug 28 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
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
2015/10/12 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
python的文件操作方法汇总
2017/11/10 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python的命名规则知识点总结
2019/10/04 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
公职人员索取回扣检举信
2014/04/04 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
优秀班主任推荐材料
2014/12/17 职场文书
2016年元旦致辞
2015/08/01 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
护理心得体会范文
2016/01/22 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书