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

如题所述

上述两种方式除了定义的语法不同之外,最主要的区别是函数声明具有【函数声明提升】的特点,将函数声明提升到作用域顶端,意思是在执行代码之前会先读取函数声明,也就是说可以把函数声明放在函数调用的后面。

例子1:

test();//弹出hello,因为【函数声明提升】的特点,函数调用之前,已经读取了该函数完成了声明

            function test(){
                alert("hello");
            }

例子2:

 test();//报错:Uncaught ReferenceError: test is not defined

            //因为【函数表达式】不具备提升的特点,在函数调用时,作用域中还未读取该函数的定义
            //作用域读取函数表达式是按照代码顺序读取
            var test = function(){
                alert("hello");
            }

            test();//弹出hello

例子3:

            if(condition){
                function test(){
                    alert("hello");
                }
            }else{
                function test(){
                    alert("world");
                }
            }

            //弹出world,因为函数声明在代码执行前就已经完成了,作用域已经完成了对该函数的读取,与条件无关
            //同名函数声明,后面的会覆盖前面的
            test();

            if(condition){
                var test2 = function(){
                    alert("hello");
                }
            }else{
                var test2 = function(){
                    alert("world");
                }
            }
            //弹出内容与条件相关,作用域读取函数表达式是按照代码执行顺序读取的
            test2();

例子4:

 //函数表达式
            var  test = function(){
                alert("hello");
            }
            //第一次调用
            test();

            //变量声明
            var s = "world";

            //函数声明
            function test(){
                alert(s);
            }
            //第二次调用
            test();

        //解释:两次调用都将弹出hello,在代码执行前方式二已经被作用域读取,然后执行方式一代码,方式一的test覆盖方式二的test,然后执行两次调用弹出hello

温馨提示:内容为网友见解,仅供参考
无其他回答

js函数声明和函数表达式的区别
上述两种方式除了定义的语法不同之外,最主要的区别是函数声明具有【函数声明提升】的特点,将函数声明提升到作用域顶端,意思是在执行代码之前会先读取函数声明,也就是说可以把函数声明放在函数调用的后面。例子1:test();\/\/弹出hello,因为【函数声明提升】的特点,函数调用之前,已经读取了该函数完成了...

js函数声明和函数表达式的区别
解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行 任何代码之前可用;而函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。alert(test(1)); \/\/正确function test(a){ return a;}alert(test1(1)); \/\/错...

js创建函数的几种方式?js函数表达式有几种高级写法详解
最后,函数表达式与函数声明的区别在于函数声明会被提升,而在运行时不会覆盖已存在的同名函数表达式。

与function定义函数有什么区别
首先后者是指函数声明,前者是指函数表达式,他们之间的区别是后者会在代码执行之前被JS解释器加载到作用域中,这样一来就可以在编程时在定义函数之前调用这个函数,此法是有效的;而前者则是在代码执行到那一行时候才会有定义,此外函数表达式是创建了一个匿名函数,然后将匿名函数赋值给一个变量。

JavaScript函数(javascript函数怎么定义)
4、区别在于,functionOne的是一条表达式语句,只有程序执行到这行函数才会被定义。然而functionTwo是函数声明,它会在JavaScript一开始就被定义。如下两个例子可以看出它们的区别。5、函数有一个属性,就是arguments,arguments数组含有调用函数时传递给函数的参数。结合类型检测,就可以构建可选参数个数的函数...

js 中动态执行代码的几种方法
Function构造函数允许创建自定义函数,与函数声明和表达式不同,Function在运行时解析,具有全局作用域,只能访问全局变量和局部变量,无法访问创建时所在的作用域。注意,Node和ESM环境有模块作用域,不同于全局作用域,Function创建的函数不能访问模块作用域。eval在运行时动态添加变量到当前作用域,但易污染...

javascript 的 "!function" 是什么意思?
function(){alert(1)}()因为function前面没有(或者! ~之类的运算符,js解析器会试图将关键字function解析成函数声明语句,而不是函数定义表达式。作为组运算符,小括号()会将其内部的表达式当成一个整体,然后返回结果,所以定义一个匿名函数正确的格式就是用小括号将函数体括起来。同样的! ~ + -等...

jQuery 里的函数怎么调用
函数表达式:var Dosth=function(){...};匿名函数:function(){...} 这三种方式的调用 1、将包含函数的js文件引入到你所要执行的html页面中;声明方法的js要在调用的js的上面,因为html加载顺序问题。当然如果声明和调用是在同一个js中,就不需要考虑html页面上应用的顺序问题。2、三种不同声明方法...

js问题!!!
JS是解释性语言,定义的一般函数是在编译时解析 而且js不存在重载的概念,所以后面的同名函数会覆盖之前的 类似于:var fn=function(){}\/\/这类匿名函数,是在执行时被解析的 function fn(){}\/\/一般的定义方式,是在编译时执行的 换句话说:第一种定义方式,调用前必须已经定义 而第二种方式 定义...

js 中的自执行函数到底是怎么运行的?
其实不要被“函数表达式”的函数两字束缚了,其实就是“表达式”,这样一来就会好理解了。在表达式的前面加个逻辑运算符(比如!取反)或数学运算符(比如+),js就会认为你是要获取表达式的值,这样它就会去运行这个表达式,这样函数就会被执行了。比如说有下面这个函数声明:function abc(){return true}...

相似回答