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中typeof的用途介绍
Apr 11 Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
js实现延迟加载的方法
Jun 24 Javascript
JQuery EasyUI的使用
Feb 24 Javascript
原生js轮播(仿慕课网)
Feb 15 Javascript
javascript ES6 新增了let命令使用介绍
Jul 07 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
Sep 30 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
浅析java线程中断的办法
Jul 29 Javascript
微信小程序云开发(数据库)详解
May 17 Javascript
Vue this.$router.push(参数)实现页面跳转操作
Sep 09 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数组应用之比较两个时间的相减排序
2008/08/18 PHP
php smarty的预保留变量总结
2008/12/04 PHP
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
python追加元素到列表的方法
2015/07/28 Python
Python中方法链的使用方法
2016/02/23 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
Django密码存储策略分析
2020/01/09 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
C语言笔试题
2014/09/04 面试题
民族团结先进集体事迹材料
2014/05/22 职场文书
图书借阅制度范本
2015/08/06 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis