JS作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”QQ253079952
2012-11-02 17:30
645 查看
JS作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”
var local='sdf';
function local(){
var local;
document.write(local);//undfined
local='sdfsf';
document.write(local);//sdfsf
}
这也就是 为什么一般初学者看到上面这个方法时,都以为第一个输出的值应该是sdf,以前我也这样认为,百思不知其解,现在有点小眉目了,以为函数内不论在哪儿定义的同名的局部变量,都会影响这整个函数,虽然解析时是一行一行解析的,这儿可能是javascript解释器里可能封装了一个类,判断如果一个函数内变量况且和函数外的全局变量重名的话,他就把这个函数的变量提前定义成局部变量,不论这个局部变量是在函数内的第一行,还是第二行 在一个alert输出的后面的一样。在整个函数内都成立。
S作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”
*首先,只是在这个函数中有定义,也就是说,在输出语句后定义和输出语句前定义是一样的结果,最后变量的值都是“undefined”,下面两种写法结果一样;
function local(){
document.write(local);
var local;
}
function local(){
document.write(local);//undfined
var local='sdfsf';
document.write(local);//sdfsf
}
还有就是未声明的变量其实就是未定义的变量
比如 我直接alert(a); //其实这样是属于未定义 所以会报错 而不是输出 undfined
比如 var a ; alert(a); //这样的话 输入定义但是没有赋值 所以会输出undfined
但是像这样的话:
function sss(){
a='sdfsf';
alert(a);
}
对象会把a生成隐式全局变量
var local='sdf';
function local(){
var local;
document.write(local);//undfined
local='sdfsf';
document.write(local);//sdfsf
}
这也就是 为什么一般初学者看到上面这个方法时,都以为第一个输出的值应该是sdf,以前我也这样认为,百思不知其解,现在有点小眉目了,以为函数内不论在哪儿定义的同名的局部变量,都会影响这整个函数,虽然解析时是一行一行解析的,这儿可能是javascript解释器里可能封装了一个类,判断如果一个函数内变量况且和函数外的全局变量重名的话,他就把这个函数的变量提前定义成局部变量,不论这个局部变量是在函数内的第一行,还是第二行 在一个alert输出的后面的一样。在整个函数内都成立。
S作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”
*首先,只是在这个函数中有定义,也就是说,在输出语句后定义和输出语句前定义是一样的结果,最后变量的值都是“undefined”,下面两种写法结果一样;
function local(){
document.write(local);
var local;
}
function local(){
document.write(local);//undfined
var local='sdfsf';
document.write(local);//sdfsf
}
还有就是未声明的变量其实就是未定义的变量
比如 我直接alert(a); //其实这样是属于未定义 所以会报错 而不是输出 undfined
比如 var a ; alert(a); //这样的话 输入定义但是没有赋值 所以会输出undfined
但是像这样的话:
function sss(){
a='sdfsf';
alert(a);
}
对象会把a生成隐式全局变量
相关文章推荐
- JavaScript基础:JS函数中声明的所有变量在整个函数中都是有定义的
- js 函数定义,使用,作用域,变量声明提升,遇解析.....
- js变量声明提升,变量作用域与函数作用域,作用域链
- js中变量的函数作用域和声明提前
- 在PHP代码中经常能看到一些类似PG(), EG()之类的函数,他们都是PHP中定义的宏,这系列宏主要的作用是解决线程安全所写的全局变量包裹宏, 如$PHP_SRC/main/php_globals.
- 在iframe里调用parent.func()引出的js函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
- javascript基础(函数与方法的区别,变量作用域,变量和函数的声明提前,函数作用域)(十五)
- JS中定义函数的两种方式哪个优先级高·引出变量和函数声明的运行顺序
- 在 JavaScript 核心语言中,全局对象的预定义属性都是不可枚举的,所有可以用 for/in 循环列出所有隐式或显式声明的全局变量
- js中所有的变量声明var当被悬置到函数的顶部
- JS函数运行在它们被定义的作用域内,而不是它们被执行的作用域内
- 标识符的作用范围,变量的声明和定义,auto,register自动变量,代码作用域的静态变量
- C语言如何跨文件调用函数定义中声明的变量
- js变量和函数声明的提升(转)
- 在变量作用域方面,函数声明和函数表达式有什么区别?
- js 多种变量定义(对象直接量,数组直接量和函数直接量)
- C++中重构函数声明定义与static变量使用方法
- js 模仿块级作用域(私有作用域)、私有变量
- Js作用域链及变量作用域
- Python的列表等变量的声明必须要在函数定义与函数调用之前