浅谈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 中令人困惑的变量赋值
Aug 13 Javascript
不能再简单的无闪刷新验证码原理很简单
Nov 05 Javascript
Prototype源码浅析 Number部分
Jan 16 Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 Javascript
利用JS来控制键盘的上下左右键(示例代码)
Dec 14 Javascript
jquery模拟alert的弹窗插件
Jul 31 Javascript
AngularJS实现按钮提示与点击变色效果
Sep 07 Javascript
Bootstrap Multiselect 常用组件实现代码
Jul 09 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 Javascript
javascript头像上传代码实例
Sep 28 Javascript
js实现九宫格布局效果
May 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中的实现trim函数代码
2007/03/19 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
javascript打印输出json实例
2013/11/11 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Python爬取成语接龙类网站
2018/10/19 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Python循环结构的应用场景详解
2019/07/11 Python
python之array赋值技巧分享
2019/11/28 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
python 模拟登录B站的示例代码
2020/12/15 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
音乐专业应届生教师求职信
2013/11/04 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
大学感恩节活动总结
2015/05/05 职场文书
检讨书怎么写
2015/05/07 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers