
首先你要相信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是一个函数变量。它只能在作用域范围中,定义之后使用。
望采纳,谢谢支持!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)