美文网首页
函数问题

函数问题

作者: 帅帅哒小白 | 来源:发表于2016-11-14 21:34 被阅读20次

    变量的作用域

    局部变量:定义位置在函数内部用var定义的变量,作用域是在定义的当前函数内部,只对当前函数有作用。
    注意:如果在函数的内部不用var定义的变量默认是全局变量。

    变量的提升

    变量的提升?难道变量也像玩游戏一样,也会打怪升级?!其实不然。
    首先,在一个程序内当局部变量和全局变量同名时,是优先使用局部变量的。但是当程序进入新的函数时,他会将所有的变量声明放在函数开始的位置,仅仅会提升变量的声明,而不会提升变量的赋值。这就是传说中变量的提升!
    <script type="text/javascript"> var num = 10; function f(){ console.log(num); var num = 20; } f(); </script>

    这里就定义了一个同名的局部变量和全局变量,在函数体内打印变量num的值。但是,奇怪的是此时打印出的num值为undefined,很奇怪吧!这就是因为变量的提升而导致的问题,而且还因为局部变量和全局变量同名。所以在一个程序中定义变量,尽量不要出现两个同名的变量。

    函数也是一种数据

    这个就直接上代码吧。
    function fun(){ console.log("hello world"); } var f = fun; f(); fun();

    这里就是用变量f保存了函数fun,可以通过变量f直接访问函数fun();此时,f与fun是等价的,结果会两次打印"hello world"。

    函数也是一种数据.PNG

    匿名函数

    匿名,匿名,也就是把名字给隐藏了,没有名字的函数。
    当匿名函数没有赋值给另一个变量时有两种优雅的用法:

    1. 直接传递给函数
    2. 执行某些一次性的代码

    function m(mySum,q,w){ return mySum(q,w); } var ret = m(function(a,b){ return a+b; },1,2) console.log(ret);

    这里按照程序的执行来说;先是执行打印ret,通过ret去寻找m(function(a, b){return a + b;}, 1, 2);这里的function(a, b){return a + b;}可以看出是一个参数;紧接着又和m(mySum, q, w)匹配起来,执行m(mySum,q,w){return mySum(q,w)};数据1和2通过m方法传递给了q与w;通过mySum(q,w),传递给了a和b;两相结合,可以得出ret的值为3。

    即时函数

    即时函数也被称为自执行函数,当函数声明之后立即执行;
    组成:(匿名函数)(给第一个小括号中的匿名函数传递参数);
    第二个小括号表明函数立即执行,并且给函数传参。
    代码如下:
    (function(str){ console.log(str); })("Hello World")

    这里会直接输出"Hello World"字符串。

    总结:通过这次学习,也使我认识到了函数的各种不一样的使用方法,又涨见识啦!

    相关文章

      网友评论

          本文标题:函数问题

          本文链接:https://www.haomeiwen.com/subject/rhncpttx.html