为什么变量名不能和函数名同名

为什么变量名不能和函数名同名,第1张

首先你要相信c/c++的语法规定肯定是有原因的,这相当于生活中的规矩,无规矩酒不成方圆。我举个简单例子说明你这种情况。

void fun(void)

{

void (fun) (void); //函数void (void)型指针变量定义

//若程序中需要fun函数的入口地址,如

void (pfun)(void) = fun; //此时这个fun到底是fun函数的入口地址还是函数指针变量fun呢? 如果允许函数名和变量名相同,就很容易造成“引用混乱”!,这就是原因

}

//希望对你有用!!

你要了解一个词"Hoisting"

声明语句会被自动提升到所属作用域顶端这是一种默认行为

比如:

red = 100;

var red; //这一句会被自动提升到作用域的顶端

consolelog(red)

// 由于默认提升的行为,以上代码与以下代码等同

var red;

red = 100

consolelog(red)

需要注意的是,默认仅提升声明,而不是初始化(赋值) 比如:

/ eg1 /

consolelog(x) //会报错,提示not defined

/ eg2 /

consolelog(x) //不会报错,因为var自动提升到了当前作用域的顶部

var x = 456

// 相当于如下代码

var x //仅声明被提升

consolelog(x)

x = 456 //初始化(赋值)不被提升// 还是举例

/ eg3 /

consolelog(x);

var x = 1;

function f() {

    consolelog(x);

    var x = 2;

    consolelog(x);

}

f();

consolelog(x);

//以上代码可以类比为:

var x;

consolelog(x);

x = 1;

function f() {

    var x;

    consolelog(x);

    x = 2;

    consolelog(x);

}

f();

consolelog(x);

//所以结果为undefined,undefined,2,1

1、在{}里的funcion也会提升,提升到全局和代码块顶部。并新建局部作用域。 

2、当执行到function的声明语句,会把声明语句之前的值复制给全局。

3、之后的赋值全是在局部作用域中进行。

你的理解不对。

在JS中,“创建”一个函数有两种方式,定义法和函数变量。以下是函数定义和函数变量的示例:

function foo () {} // 函数定义

var foo = function() {} // 函数变量

第一行中,foo是一个函数名,不是变量。它是全局性质的,代码任何地方都可以使用。

第二行中,foo是一个函数变量。它只能在作用域范围中,定义之后使用。

望采纳,谢谢支持!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11671427.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存