函数声明与函数表达式的不同

本文探讨了JavaScript中函数声明与表达式的区别,包括声明提前现象、使用位置限制及调用方式,如普通调用、作为对象方法调用等。
简单的例子:
主要是 声明提前的问题。
<!DOCTYPE html>
var demo={
    speak:function(name){
        return{
            a:function z(name){
                alert(name+'~\(≧▽≦)/~啦啦啦');
            }
        }
    },
}

demo.speak().a('有点晕');

 

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>
<script>
//    var tensquared=(function(x){
//        alert(x*x);
//    }(10))

    //函数声明:
    shengming(1); //可以正常读到函数,声明提前
    //函数表达式:
    biaodashi(2); //报错  函数表达式要先声明再用 函数表达式.html:17 Uncaught TypeError: biaodashi is not a function
    //函数声明:
    function shengming(n){
        alert(n);
    };
    //函数表达式:
    var biaodashi=function(n){
        alert(n);
    };
</script>

 还有一点不同:函数定义表达式可以出现在javascript代码的任意地方,但是函数声明就不能出现在循环和条件判断中,或者try/cache/finally以及with语句中。

函数调用

1:普通函数调用:
function demo(x){
        return x+1;
    }
    demo(2); //3

可以用来判定是否进入严格模式:

'use strict'; //进入严格模式

var strict=(function(){
    if(!this)
    alert('严格模式');
    else
    alert('非严格模式');
}())
 2.当做方法调用:
var demo={
    speak:function(name){
        alert(name+'~\(≧▽≦)/~啦啦啦');
    },
}

demo.speak('小米');

 方法调用与普通调用的区别 在于上下文;

方法调用还可以通过【】的形式:

var demo={
    speak:function(name){
        alert(name+'~\(≧▽≦)/~啦啦啦');
    },
}
demo[
'speak']('小小');
3.更复杂点的:
var demo={
    speak:function(name){
        return{
            a:function z(name){
                alert(name+'~\(≧▽≦)/~啦啦啦');
            }
        }
    },
}

demo.speak().a('有点晕');

 上面的例子,引入了一个概念:方法链;

当方法的返回值是个对象,这个对象还可以在调用它的方法。这种方法调用序列中每次的调用结果都是另一个表达式的组成部分。

转载于:https://www.cnblogs.com/gaidalou/p/5955454.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值