js函数与变量同名

console.log(a);
var a = 3;
function a(){}

输出的结果是:[Function: a]

注意一下几点就能知道原因了!

1)函数声明会置顶
2)变量声明也会置顶
3)函数声明比变量声明更置顶:)
4)变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置
5)声明过的变量不会重复声明

按以上的规则代码等价为

function a(){}
var a;//实际无效
console.log(a);
a = 3;
时间: 2024-07-29 10:08:36

js函数与变量同名的相关文章

js 函数和变量的提升

1. 函数的作用域: js中 ,函数的作用域为函数,而不是大括号. var hei = 123;if(true){ hei = 456;}console.log(hei);// 456; var hei = 123;if(true){ (function(){ var hei = 456;})(); }console.log(hei); // 123 函数内部可以用用函数外部的变量,而函数外部的不可以用函数内部的变量(可以用闭包实现效果,随后总结). (function(){ var hei =

js 判断js函数、变量是否存在 JS保存和删除cookie操作,判断cookie是否存在的方法

//是否存在指定函数 function isExitsFunction(funcName) {    try {        if (typeof(eval(funcName)) == "function") {            return true;        }    } catch(e) {}    return false;}//是否存在指定变量 function isExitsVariable(variableName) {    try {        if

JS函数、变量作用域

函数参数 函数的()中指定一个或多个形参(形式参数),多个形参之间用,号隔开,声明形参相当于在函数内部声明了对应的变量,但不赋值.在调用时在()中指定实参 ?调用时解析器不会检查实参类型.数量,实参可以是任意的数据类型. 函数返回值 使用return来设置函数的返回值,作为函数的执行结果来返回 return后可以跟任意类型的值 语法:return 值 function sum(a,b,c){ var d = a + b + c; return d; } var result = sum(1,2,

关于函数和变量同名时(笔试题)

以往关注比较多的是变量提升,把变量和函数同名时,函数提升的规则不小心给漏掉了,唉,失去一分,今日笔试题 console.log(a) var a; console.log(a) a = 10 console.log(a) function a() { let c = 1; } console.log(a) 结果如下图所示: 1) 变量声明存在提升,函数声明存在提升,但函数声明比变量声明更置顶 2) 声明过的变量不会重复声明 原文地址:https://www.cnblogs.com/Tiboo/p

js 判断js函数、变量是否存在

//是否存在指定函数 function isExitsFunction(funcName) { try { if (typeof(eval(funcName)) == "function") { return true; } } catch(e) {} return false; } //是否存在指定变量 function isExitsVariable(variableName) { try { if (typeof(variableName) == "undefined&

HTML代码中在两个匿名函数中使用同名变量出现bug而引起的变量作用域的思考

在学习HTML的时候,为了方便地对同一个css样式的不同值的效果进行对比,我做成了下面这个样子. 代码也是很典型的用于展示的格式(p元素的内容随便写的): 1 <head> 2 <style> 3 p{ 4 border: medium solid black; 5 padding: 5px; 6 margin: 5px; 7 text-justify:inter-word; 8 } 9 button{ 10 margin: 5px; 11 } 12 </style>

js 函数 /变量/ 以及函数中形参的预解析的顺序

//js 解析分为两个阶段:预编译和执行期 //预编译:声明但是没有初始化 //声明式:funcion a(){} //赋值式:var a = function(){} //匿名函数:function(){} //-----函数之间比较 //结论 1 同一个函数声明,后来者居上 //结论 2 声明式函数要提前赋值式函数 //-----函数和变量的比较 //结论 3 函数声明提升优先级大于变量声明 函数声明要覆盖变量声明 console.log(f1)//打印的是函数 f1() //2 funct

js函数表达式和函数声明的区别

我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function foo() { // <-- 添加这一行 var a = 3; console.log( a ); // 3 } // <-- 以及这一行 foo(); // <-- 以及这一行 console.log( a ); // 2 虽然这种技术可以解决一些问题,但是它并不理想,因为会导致一些额外的

JS函数——作用域

一 : 作用域的相关概念 首先看下 变量作用域 的概念:一个变量的作用域是程序源代码中定义这个变量的区域.————————<javascript权威指南>第六版全局变量拥有全局作用域,函数体内定义的局部变量拥有函数作用域. 就个人理解,作用域(scope),顾名思义,是一块区域 或 领域 ,并且有某些对象(包括变量,属性,方法等)能够在这里起作用:作用域是在定义的时候决定的,和什么时候执行无关:这时候问题来了: 问题1:区域在那儿? 他是一个概念,是看不到摸不着的:在这个区域内原本是什么都没有