javascript - js函数中的函数问题?

查看:103
本文介绍了javascript - js函数中的函数问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function test(){
    var arr = [];
    for(var i = 0; i < 5; i++){
        arr[i] = function a() {
            return i;
        }
        a();
    }
    return arr;
}
test();//a is not defined

function c(){
    function d(){
        console.log('2');
    }
    d();
}
c(); //2  

为什么第一个是undefined呢,不是明明定义了a吗在之前?

解决方案

函数表达式的函数名字只属于它自己的作用域


以你第二段代码为样本改成函数表达式:

function c(){
    var test = function d(){
        console.log('2');
    }
    test();
}
c(); //2

上面这样是没有问题的,但是改成这样:

function c(){
    var test = function d(){
        console.log('2');
    }
    d();
}
c();  //Uncaught ReferenceError: d is not defined

引用错误ReferenceError
作用域中查找标识符但是最后没有找到的时候就会抛出这个错误。
也就是说当前作用域中压根就没有以d作为标识符的变量(函数)。
(顺带一提,如果在这里找到了d标识符,但是它不是函数无法运行,会抛出TypeError类型错误。)

那么,标识符d到底在哪个作用域?
答案是它自己:

function c(){
    var test = function d(){
        console.log(d);
    }
    test();
}
c();

这里最后会把函数d打印出来,在函数d内部是可以使用d标识符的。

这篇关于javascript - js函数中的函数问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆