Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

不建议要求同作用域的变量在function头部申明 #11

Open
hefangshi opened this issue Apr 30, 2014 · 1 comment
Open

不建议要求同作用域的变量在function头部申明 #11

hefangshi opened this issue Apr 30, 2014 · 1 comment

Comments

@hefangshi
Copy link
Member

虽然同作用域的变量在头部申明可以避免编写者因对变量作用域的错误判断导致的一些隐蔽BUG,但是对变量随用随申明的形式我认为有以下几点好处

1.代码逻辑更清晰。如果一个变量只在块级代码中使用,在块级代码中声明更容易让代码阅读者了解这个变量在编写者意图中的使用范围。
2.对重构友好。随用随申明变量的形式可以将关键逻辑代码与变量的声明写在一块,在重构时,不需要去头部寻找申明的变量(这些变量可能还由于隔行等因素不易于复制),方便了解程序结构。

而在头部申明避免的问题完全可以通过jslint这类工具来进行检查和提醒,避免变量重复定义等问题。

@2betop
Copy link
Contributor

2betop commented Apr 30, 2014

放在头部主要有几个考虑

  1. 避免类似与这样的写法,在for语句中多次申明

    function funA() {
        var a = 3;
        var i = 0;
    
        for (; i < 10; i++) {
            var obj = 234;
    
            ...
        }
    }
  2. 避免这种误会。

    var myvar = 'my value'; 
    
    (function() { 
      // 预期是my value,结果是undefined.
      alert(myvar); 
    
    
      // 躲在后面某个地方
      var myvar = 'local value'; 
    })();
  3. 同一个作用域下,所有的变量都在顶部申明,我觉得更加有利于管理,直接滚动到顶部就可以管理所有变量,不会出现发现某个变量不知道在哪申明的,必须一个逻辑块一个逻辑块的找,才能确认此变量没有暴露到全局(当然jslint/jshint都能检测出来)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants