JS声明语句提升与作用域】的更多相关文章

<!DOCTYPE html><html><head></head><body><script>//---------------------- 函数预编译 ------------------------------------------------// 也可以理解为 function声明语句被提升到作用域顶部// 注意不能在firebug的控制台下直接运行,控制台环境下没声明语句的提升效果var ifunction bar(){…
var i = 2,    x = 5;var fn = function (x) {    x += 3;    return function (y) {        console.log((x++) + y + (--i));    }};var f = fn(1);f(2);fn(3)(4);f(5); 答案:f(2) => 7;     fn(3)(4) => 10;    f(5) =>9; 解题思路: 1. var f = fn(1);相当于开了一个堆内存(私有作用域)…
原文出自:http://www.cnblogs.com/xxcanghai/p/5189353.html作者:小小沧海 题目如下: function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { alert (2);}; Foo.prototype.getName = function () { alert (3);}; var getName = function…
var:变量提升(无论声明在何处,都会被提至其所在作用域的顶部) let:无变量提升(所在的块内,未到let声明时(即let声明之前),是无法访问该变量的(not defined)),let变量不能重复声明(报错has already been declared) const:无变量提升,声明一个基本类型的时候为常量,不可修改:声明对象可以修改 <script> var a = 1; function fn() { console.log(a)//undefined a = 2; consol…
原文:你不知道的js系列 先有鸡还是先有蛋? 如下代码: a = 2; var a; console.log( a ); 很多开发者可能会认为结果会输出 undefined,因为 var a 在 a = 2 后面,好像变量似乎被重新定义了,所以结果会是默认值 undefined. 然而,正确结果是 2. 下面这段代码,a 在 定义之前被引用.不会抛出错误,也不会输出 2 . console.log( a ); var a = 2; 结果输出 undefined. 编译器 回忆一下第(一)节中的内…
一.前言 Uncaught TypeError: ... is not a function function max(){}表示函数声明,可以放在代码的任何位置,也可以在任何地方成功调用: var max  = function(){};表示函数表达式,即将一个匿名函数赋值给一个变量,实现通过变量来调用这个匿名函数,但它需要在声明过后才能进行调用,如果调用在声明之前就会报如上红色字体的错误.而这在函数声明中不会出现这样的错误. 二.正文 (一).代码示例 //函数表达式 myFunc();//…
<!DOCTYPE html><html><head></head><body><script>//---------------------- 函数预编译 ------------------------------------------------// 也可以理解为 function声明语句被提升到作用域顶部// 注意不能在firebug的控制台下直接运行,控制台环境下没声明语句的提升效果var ifunction bar(){…
function functions(flag) { if (flag) { function getValue() { return 'a'; } } else { function getValue() { return 'b'; } } return getValue(); } console.log(function functions(true)); 请问这段代码会输出什么呢. 答案将永远是:b. 解释一下为什么,因为在js是没有块级作用域的,又因为函数声明提升的原因,上面的这段代码变…
  var foo = 1; function bar() {     if (!foo) {         var foo = 10;     }     alert(foo); } bar();//解释:js没有块级作用域,if switch while等不会有块级作用域 如果你对foo的值实际上为"10"而感到诧异的话,再看一下下面这个例子: var a = 1; function b() {     a = 10;     return;     function a() {…
作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123; { console.log( num ); } } console.log( num ); 上面这段代码在JavaScript中是不会报错的,但是在其他的编程语言中(C#.C.JAVA)会报错. 这是因为,在JavaScript中没有块级作用域,使用{}标记出来的代码块中声明的变量num,是可以…