解决方案 »
- 子窗口向父窗口传递数据的问题
- 鼠标右键的问题
- 【求助】有没有会SMIL的呀!
- color类型的变量值,怎么转换成如#FFFFFF格式的字符串
- javascript不执行
- 如何修改样式 这中样式该如何布局
- innerHTML的深入用法
- 如何向 window.open() 打开的窗口里传送参数?? 除了GET方式(?name=yuan&pass=8888) 传递参数,还有什么办法吗??
- 菜鸟问题,帮个忙!
- 这个多选列表框用这个style后,四条边还是和原来一样,select是不是不能变边框 的?<style>.getrect{border-top-width:0px; border-left-
- js 在两个div之间触发回调函数,急急急
- 关于JQM的changePage带参数的问题
data.forEach(function(x){
//forEach方法,不改变原有的数组
//而这里的sum是属于局部作用域中的变量,
//在该匿名函数外部,是没有办法访问的
//那你如何能在外部访问到sum=55?
var sum=0;
sum+=x*x;
return sum;
});
//console.log(sum);
//因为在这里,sum所能访问的作用域,是没有定义sum变量的
//所以,不能访问,会报错的。关于作用域链,有兴趣可以参考:浅析作用域链–JS基础核心之一,希望能对你有点帮助
var data=[1,2,3,4,5];
data.forEach(function(x){
sum+=x*x;
});
console.log(sum);亲测可以打印出来'55',浏览器环境Firefox36.0.1
var a=[1,2,3,4,5]; /*定义一个数组并初始化*/
forEach(function(x){ /*将数组元素的值传递给x*/
/*请注意!这是一个匿名函数!拥有其作用域!*/
sum+=x*x; /*即使在函数体内不声明变量sum,我也可以直接拿过来使用*/
});
console.log(sum);/*问题在这里:为什么打印出来的不是全局变量sum的值:0,而是forEach()内匿名函数里的sum,按照'函数作用域'的定义:我在函数体外应该是访问不到匿名函数体内的变量*/这下问题应该清晰很多了
---第一段代码sum是再外部申明的,不是在匿名函数内部,forEach后当然访问的是上面申明的sum。。你自己写的那个代码,sum只能在匿名函数里面访问,外部无法访问。楼主多去补下变了作用域的知识
因为同名变量容易引污量,所以写变量的时候要小心
规范的写法就是加var,形成局域作用,避免同名污染
<script type="text/javascript">
//fn()跑了一遍,8成了全局的值,全局变量覆盖了局部变量
var x=5
function fn(){
x=8
}
fn()
document.write(x) //8
//没有运行函数,没载入内存,还是调用原先的值
var x=5
function fn(){
x=8
}
document.write(x) //5
//函数加了var,只有在局域里发生作用,x还是5
var x=5
function fn(){
var x=8
}
fn()
document.write(x) //5
</script>
简单的写了几个不是很详细,还是搜索下作用域和加不加var的区别文章