Molerose

Javascript DOM 编程艺术 (笔记No.6 - 函数 变量作用域)
学习一种新的程序设计语言看起来可能很难,但事实却并非如此。DOM脚本看起来似乎比CSS更复杂,可只要领悟了它的语法...
扫描右侧二维码阅读全文
12
2018/09

Javascript DOM 编程艺术 (笔记No.6 - 函数 变量作用域)

学习一种新的程序设计语言看起来可能很难,但事实却并非如此。DOM脚本看起来似乎比CSS更复杂,可只要领悟了它的语法,你就会发现自己又掌握了,一样功能强大的Web开发工具。归根结底,代码都是思想和概念的体现。


作用域

变量既可以是全局的,也可以是局部的。在谈论全局变量和局部变量之间的区别时,我们其实是在讨论变量的作用域(scope)

全局变量

全局变量(global variable)可以在脚本中的任何位置被引用。

一旦你在某个脚本里声明了一个全局变量,就可以从这个脚本中的任何位置,包括函数内部,在哪个函数的外部是无法调用他的。

局部变量

局部变量(local variable)只存在于声明它的哪个函数的内部,在哪个函数的外部是无法引用它的。

局部变量的作用域仅限于某个特定的函数。

因此,我们在函数里既可以使用全局变量,也可以使用局部变量。

这很有用,但它也会导致一些问题。

如果在一个函数里不小心使用了某个全局变量的名字,即使本意是想使用一个局部变量,Javascript也会认为是在引用哪个全局变量。

还好,可以用var关键字明确地为函数变量变量设定作用域。

如果在某个函数中使用了var,那个变量就将被视为一个局部变量,它只存在于这个函数的上下文中;反之,如果没有使用var,那个变量就将被视为一个全局变量,如果脚本里已经存在一个与之同名的全局变量,这个函数就会改变哪个全局变量的值。

代码实例

function square(num) {
    total = num * nim;
    return total;
}
var total = 50;
var number = square(20);
alert(total);
// alert 最终弹出来的值为 400

全局变量 total 的值变成了 400。

本意是让square()函数只把它计算出来的平方值返回给变量number,但因为未把这个函数内部的total变量明确的声明为局部变量,这个函数把名字同样是total的哪个全局变量的值也给改变了。

那么正确的做法,代码如下:


function square(num) {
    var total = num * num;
    return total;
}

现在,全局变量total安全了,再怎么调用square()函数也不会影响到它了。

请记住,函数在行为方面该想一个自给自足的脚本,在定义一个函数式,我们一定要把它内部的变量全部都明确地声明为局部变量。

如果你总是在函数里使用var关键字来定义变量,就能避免任何形式的二义性隐患。

Last modification:September 12th, 2018 at 09:37 pm
If you think my article is useful to you, please feel free to appreciate

9 comments

  1. 好时光荣

    编程要多动手,多操练,才能找到合适的工作。

  2. 太阳黑子

    编程基础打得好,日后写代码才有灵感

  3. cess

    好好学习,打卡!|´・ω・)ノ

  4. 女生游戏

    编程基础打得好,日后写代码才有灵感

Leave a Comment