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

简单的例子:
主要是 声明提前的问题。
<!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('有点晕');

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

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

posted @ 2016-10-13 10:29  盖大楼  阅读(172)  评论(0编辑  收藏  举报