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 相关文章推荐
javascript eval函数深入认识
Feb 21 Javascript
JavaScript 数组运用实现代码
Apr 13 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
jquery 之 $().hover(func1, funct2)使用方法
Jun 14 Javascript
Jquery实现自定义tooltip示例代码
Feb 12 Javascript
JS实现div居中示例
Apr 17 Javascript
JavaScript函数作用域链分析
Feb 13 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
Jan 19 Javascript
vue 注册组件的使用详解
May 05 Javascript
vue中tab选项卡的实现思路
Nov 25 Javascript
vue拖拽组件使用方法详解
Dec 01 Javascript
Vue3配置axios跨域实现过程解析
Nov 25 Vue.js
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的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
php curl基本操作详解
2013/07/23 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
js+html5生成自动排列对话框实例
2017/10/09 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
微信小程序实现预览图片功能
2020/10/22 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
从vue源码看props的用法
2019/01/09 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
ptyhon实现sitemap生成示例
2014/03/30 Python
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
python实现关键词提取的示例讲解
2018/04/28 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
如何通过python计算圆周率PI
2020/11/11 Python
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
买卖合同协议书范本
2014/10/18 职场文书
商标侵权律师函
2015/05/27 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
python中tkinter复选框使用操作
2021/11/11 Python
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python