JavaScript中重名的函数与对象示例详析


Posted in Javascript onSeptember 28, 2017

前言

本文主要给大家介绍了关于JavaScript中重名的函数与对象的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

JavaScript 允许重复声明变量,后声明的覆盖之前的。

var a = 1;
var a = 'x';
console.log(a);
//输出'x'

JavaScript允许重复定义函数。

JavaScript没有重载这个概念,它仅依据函数名来区分函数。

后定义的同名函数覆盖之前的,与参数无关。

function test() {
 console.log("test");
}
test(); //输出 "test arg0 + undefined"

function test(arg1) {
 console.log("test arg" + arguments.length + " + " + arg1);
}
test(1,2); //输出 "test arg2 + 1"

实参个数如果比形参少,那么剩下的默认赋值为undefined;如果实参传的比形参数量多,那么是全部都会被传进去的,只不过没有对应的形参可以引用(但可以用arguments来获取剩下的参数)

function test(arg1) {
 for(var i=0; i<arguments.length; i++) {
 console.log(arguments[i]);
 }
}
test(1,2); //输出 1 2

变量与函数重名的时候,变量生效

这涉及到了变量和函数的预解析:

- 变量声明会被顶置,函数声明也会被顶置且比变量更先声明。

- 变量的声明和赋值语句一起写时,JS引擎在解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置。

- 声明过的变量不会再重复声明。

var a = 100;
function a() {
 return "function";
}
console.log(a); //输出 100
console.log(a()); 
/*
报错
Uncaught TypeError: a is not a function
 (anonymous function) @test.html:9
*/

JS中有两种函数,一种是普通函数,一种是函数对象。下面的这种就是“函数对象”,它实际上是声明一个匿名函数,然后将该函数的init方法赋值给该变量。

var a = 100;
var a = function() {
 return "function";
}
console.log(a);
/* 
输出
function() {
 return "function";
}
*/
console.log(a()); //输出 "function"

函数与内部变量重名

定义普通函数,即在window变量下,定义一个key,它的名字为该函数名,值为该函数的地址。函数内部的this指向window对象。

function a() {
 console.log(this); //输出 window{...}
 this.a = 1;  //即 window.a = 1,此时window下的function a已经被该变量覆盖了。
 var a = 5;  //下面的这几个变量都是局部变量,仅在花括号范围内有效。 
 a = 10;
 var v = "value"
 return "function";
}
console.log(a);  //输出 function a {...}
console.log(a()); //输出 "function"
console.log(a);  //输出 1
console.log(v);
/*
输出
Uncaught ReferenceError: v is not defined
 (anonymous function) @ mycolor.html:15
*/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
强制设为首页代码
Jun 19 Javascript
3款实用的在线JS代码工具(国外)
Mar 15 Javascript
js中replace的用法总结
Dec 27 Javascript
Js+Jq获取URL参数的集中方法示例代码
May 20 Javascript
JS实现随机乱撞彩色圆球特效的方法
May 05 Javascript
javascript实现在线客服效果
Jul 15 Javascript
JavaScript 常见安全漏洞和自动化检测技术
Aug 21 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
Jun 10 Javascript
记一次vue-webpack项目优化实践详解
Feb 17 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
Aug 20 Javascript
layui中的switch开关实现方法
Sep 03 Javascript
Vue实现简单的留言板
Oct 23 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
Sep 28 #Javascript
微信小程序下拉刷新界面的实现
Sep 28 #Javascript
详解Vuex中mapState的具体用法
Sep 28 #Javascript
Node.js学习之地址解析模块URL的使用详解
Sep 28 #Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 #Javascript
React Native模块之Permissions权限申请的实例相机
Sep 28 #Javascript
Node.js学习之查询字符串解析querystring详解
Sep 28 #Javascript
You might like
PHP生成网页快照 不用COM不用扩展.
2010/02/11 PHP
php UBB 解析实现代码
2011/11/27 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
Python-嵌套列表list的全面解析
2016/06/08 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
导游词欢迎词
2015/02/02 职场文书
致接力运动员加油稿
2015/07/21 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL