JavaScript作用域
来源:互联网 发布:软件使用费增值税税率 编辑:程序博客网 时间:2024/06/08 12:54
一、作用域和作用域链
对于JavaScript初学者来说,我们创建一个方法、变量或者方法,他们都有一个生存的环境,好比人的生存环境就是地球(空气)一样,离开了这个生存环境就会挂掉。对于变量来说,他们的作用域就是这个生存环境。
1.对于直接定义的函数和对象的方法,作用域默认状态下是它的定义处的作用域链。
var name = 'window下的name<br/>'; var resultCon; function fn1() { resultCon.innerHTML += name; } function MyObj() { var name = 'MyObj下的name<br/>'; this.doFunction = function() { resultCon.innerHTML += name; }; } window.onload = function() { resultCon = document.getElementById('result'); var name = "onload下的name<br/>"; var fn2 = function() { resultCon.innerHTML += name; }; fn1(); //window下的name fn2(); //onload下的name var obj = new MyObj(); obj.doFunction(); //MyObj下的name };
输出结果:代码输出结果:
window下的name
onload下的name
MyObj下的name
(1).来看看这个输出啥结果
var v = "hello";(function(){ console.log(v); var v = "world";})();
结果是:undefined
javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面。
声明宣称一个名字的存在,定义则为这个名字分配存储空间,而初始化则是为名字分配的存储空间赋初值。
所以他其实相当于
var v;//声明变量vv = "hello";//(定义并)初始化变量v
var v = "hello";(function(){ var v; //declaration hoisting console.log(v); v = "world";})();
(2).再看一个
var v = "hello";if(true){ console.log(v); var v = "world";}
输出结果是:hello
javascript是没有块级作用域的。函数是JavaScript中唯一拥有自身作用域的结构。
(3).再来一个
(function(){ //var f1,function f2(){}; //hoisting,被隐式提升的声明 f1(); //ReferenceError: f1 is not defined f2(); var f1 = function(){}; function f2(){}})();
结果是:上面代码中函数声明f2被提升,所以在前面调用f2是没问题的。虽然变量f1也被提升,但f1提升后的值为undefined,其真正的初始值是在执行到函数表达式处被赋予的。所以只有声明是被提升的。
阅读全文
1 0
- javascript的作用域
- javascript中的作用域
- JavaScript中的作用域
- JavaScript 变量作用域
- Javascript作用域浅析
- javascript的作用域
- JavaScript中的作用域
- javascript 变量作用域
- Javascript作用域
- javascript的作用域
- Javascript作用域原理
- Javascript作用域浅析
- Javascript作用域
- javascript变量作用域
- javascript的作用域
- 理解Javascript作用域
- JavaScript中的作用域
- Javascript作用域原理
- (2)birt笔记- Birt & SpringMVC & Mybatis 整合
- 说说 Java I/O 系统之 Reader 与 Writer
- Java 代码分析工具findbugs安装和使用
- bindParam和bindValue的区别以及在Yii2中的使用
- 关于java中createStatement中三个参数用法以及resultset的其余三个常量
- JavaScript作用域
- eclipse+python+pydev(解决安装成功看不到插件)
- 阿里云OSS修改大文件数据优化方案
- 秒懂,Java 注解
- 反射2
- 堆排序
- 转载 LTE和5G推动物联网(IoT)发展
- Caffe+Matlab的GUI
- itk中的图像缩小算法