浅谈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 相关文章推荐
JQuery 前台切换网站的样式实现
Jun 22 Javascript
JavaScript网页定位详解
Jan 13 Javascript
JavaScript打印网页指定区域的例子
May 03 Javascript
60个很实用的jQuery代码开发技巧收集
Dec 15 Javascript
jQuery实现的五子棋游戏实例
Jun 13 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
大型JavaScript应用程序架构设计模式
Jun 29 Javascript
两行代码轻松搞定JavaScript日期验证
Aug 03 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
Feb 03 Javascript
js中的数组对象排序分析
Dec 11 Javascript
详解新手使用vue-router传参时注意事项
Jun 06 Javascript
Node.js API详解之 util模块用法实例分析
May 09 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
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
PHP中16个高危函数整理
2019/09/19 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
跟老齐学Python之重回函数
2014/10/10 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
python for和else语句趣谈
2019/07/02 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
python 实现目录复制的三种小结
2019/12/04 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
python中adb有什么功能
2020/06/07 Python
Python读写Excel表格的方法
2021/03/02 Python
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
建筑工程自我鉴定
2013/10/18 职场文书
根叔历年演讲稿
2014/05/20 职场文书
党支部特色活动方案
2014/08/20 职场文书
军人离婚协议书样本
2014/10/21 职场文书
病危通知书样本
2015/04/17 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
七年级英语教学反思
2016/02/15 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
分享Python获取本机IP地址的几种方法
2022/03/17 Python