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 相关文章推荐
捕获关闭窗口的脚本
Jan 10 Javascript
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
Aug 03 Javascript
jquery实现select选中行、列合计示例
Apr 25 Javascript
js闭包的用途详解
Nov 09 Javascript
jQuery实现友好的轮播图片特效
Jan 12 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
Jan 15 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 Javascript
基于webpack4搭建的react项目框架的方法
Jun 30 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 Javascript
微信小程序加载机制及运行机制图解
Nov 27 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
Protoss热键控制
2020/03/14 星际争霸
PHP编码规范-php coding standard
2007/03/16 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
php中如何执行linux命令详解
2018/11/06 PHP
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
python如何查看安装了的模块
2020/06/23 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
彪马日本官网:PUMA日本
2019/01/31 全球购物
优秀护士先进事迹
2014/05/08 职场文书
工会换届选举方案
2014/05/21 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
红与黑读书笔记
2015/06/29 职场文书
八年级作文之友谊
2019/12/02 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL