相信很多Javascript开发者都在声明循环变量时犹豫过var i到底应该放在哪里:放在不同的位置会对程序的运行产生怎样的影响?哪一种方式符合Javascript的语言规范?哪一种方式和ecma标准未来的发展方向匹配?本文将对四种常见的声明循环变量的书写方式进行简单的分析和比较. 习惯1:不声明直接使用 function loop(arr) { for (i = 0; i < arr.length; i++) { // do something } } 非常危险的使用习惯,一般情况下循环变量将…
原文:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html ===翻译开始=== 你知道下面的JavaScript脚本执行结果是什么吗? var foo=1; function bar(){ if(!foo){ var foo=10; } alert(foo); } bar(); 如果你对弹出的结果是"10"感到惊讶的话,那么下面这段脚本会让你晕头转向的: var a=1; function b(){ a=…
[翻译]JavaScript中的作用域和声明提前 原文:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html ===翻译开始=== 你知道下面的JavaScript脚本执行结果是什么吗? 1 var foo=1; 2 function bar(){ 3 if(!foo){ 4 var foo=10; 5 } 6 alert(foo); 7 } 8 bar(); 如果你对弹出的结果是"10"感到惊讶的话,那么…
JavaScript中For循环实例 1.打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方. 首先,我们要想到它是一个三位数,百位(x) 1  十位(y) 0  个位(z) 0,并且它最大为9. for(var x=1;x<=9;x++){ for(var y=0;y<=9;y++){ for(var z…
在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循环,是: for-of 下面我们就来看看这 4 种 for 循环. 简单 for 循环 下面先来看看大家最常见的一种写法: 1 2 3 4 const arr = [1, 2, 3]; for(let i = 0; i < arr.length; i++) {     console.log(arr…
1.普通循环JavaScript中一般的循环写法是这样的: // sub-optimal loop for (var i = 0; i < myarray.length; i++) { // do something with myarray[i] } 这种写法的问题是,每循环一次,都需要从myarray对象中读取length属性,这对于JavaScript来说,可能会导致较大的性能问题.如果myarray是一些大型的对象,或是DOM对象更犹是如此,因为DOM对象的这些方法都是在执行时才进行查询…
<html> <head> <title>函数提升</title> <script language="javascript" type="text/javascript"> //在全局对象中声明两个全局函数,反模式 function foo() { alert("global foo"); } function bar() { alert("global bar")…
被这个问题困惑了很久,终于在网上找到了答案,感谢~ 现在分享给大家~ js中如何让一个for循环走完之后,再去执行下面的语句? 这涉及for循环变量作用域的问题,js中作用域只有函数作用域和全局作用域,在函数体内使用var 定义的变量,会被提到函数开始处进行定义,作用域为整个函数,常见的误区如下: var a=[]; for(var i = 0;i<10;i++){ var q = i; a[i]=function(){console.log(q)} } a[0]() 其中,由于for循环并不是…
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b Javascript中的基本循环形式: while do..while for 在本次视频中我们会根据例子来讨论Javascript中的while循环.以下例子从0到目标数字之间打印出所有的偶数 var targetNu…
首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting). JS 存在变量提升( Hoisting ),这个的设计其实是低劣的,它允许变量 不声明就可以访问 , 或声明在后使用在前 .新手对于此则很迷惑,甚至许多使用JS多年老手也比较迷惑.但在 ES6 加入 let/const 后,变量Hoisting 就不存在了. 一. 变量未声明,…
在C#5.0之前,如果在foreach循环中的lambda表达式里使用循环变量,那么你会发现一些意想不到的现象,例子如下: , , , }; var actions = new List<Action>(); foreach (var integer in integers) { actions.Add(() => Console.WriteLine(integer)); } actions.ForEach(action => action()); 这段代码的输出并不是所期望的1…
<!DOCTYPE html><html><body><p>点击下面的按钮,将代码块循环五次:</p><button onclick="myFunction()">点击这里</button><p id="demo"></p><script>function myFunction(){var x="";for (var i=0;i…
废话不多说,代码伺候: for i in range(3): print("hello") print(i) 运行结果如下: 从上面的例子可以看出,for循环里面的循环变量i作用域衍生到循环外面了.说明循环变量i,在遍历完之后值并没有消失,而是保留了最后一个变量的值,而且会覆盖之前变量的值!所以平时在使用的时候变量最好别和模块其他变量重复,否则可能出问题!…
定义j时应注意其变量类型char,此循环当j=0时,再执行一次则keil中j=0XFF,而不是-1,所以无法跳出循环.但在vc6.0中是可以跳出循环的. 解决办法如下:不能让j的值为负数 uchar j:…
javascript不像java等其他强类型语句,没有块级作用域(括号内的代码都有自己的作用域,变量在声明它们的代码段之外不可见)一说,但有自己的独特地方,即函数作用域. 函数作用域:变量在声明它们的函数体内以及这个函数体的任意内部函数体内是有定义的. 如下所示代码,在不同位置定义了变量i.j和k,它们都在同一个作用域内,即在函数体内均是有定义的. function test(){ var i=0; //i在整个函数体内均有定义 if(true){ var j=0; //j在整个函数体内均有定义…
函数的大体分三种,一种是函数的声明,一种是函数表达式(又称为函数的字面量) 1.函数的声明 => function myFn(){}; 2.函数的表达式 => var myFn = function() {}; 3.函数对象方式 => var myFn = new Function('n1','n2','return n1 + n2 ');  // tip: 参数必须加引号 以上:3和其他的两项用法差别较大,不作比较:主要介绍1与2的区别: 先看二个简单的例子: var myFn = f…
最近在写一些前端的代码,遇到一个产品列表遍历的问题,正好使用到for 的几种用法,于是研究了下. 代码如下,先说明下goodslist 是一个产品列表 形如这样的数据格式 { ‘types’:1, 'name':苹果 } { ‘types’:2, 'name':香蕉 } { ‘types’:3, 'name':菠萝 } 第一种写法:直接遍历数组对象方式 for ( let i =0; i < goodslist.length; i++){ if (goodslist[i].types==type…
看一段比较经典的错误代码: // 希望获取页面上的所有div,在点击的时输出对应的编号 var oDom = document.querySelectorAll("div"); // 事实上,所有的div被点击输出的都是div的个数加1 for (var i = 0; i <= oDom.length-1; i++) { oDom[i].addEventListener("click", function log() { console.log(i+1); }…
forEach循环:        arr1.forEach(function(value,i)//value 值 i 下标            {console.log([value,i])});for in 循环:         for(var k in arr1){                arr2[k]=arr1[k]*10;//k为下标            } map方法:        //循环数组 创建新数组 全部        var arr3=arr1.map(fu…
or循环是循环最紧凑的形式,并包含有以下三个重要部分组成: 循环初始化计数器的初始值.初始化语句执行循环开始之前. 测试语句,将测试如果给定的条件是真还是假.如果条件为真,那么将要执行的循环中给定的代码,否则循环会退出来. 循环语句,可以增加或减少计数器. 可以把所有的三个部分中的一行用分号隔开.语法 1 2 3 for (initialization; test condition; iteration statement){    Statement(s) to be executed if…
for (var num1 = 1;num1 < 10;num1++ ){ for (var num2 = 1;num2< 10;num2++ ){ console.log(num1+'*'+num2+'='+num1*num2) }console.log("<br>")}TODO 问题一:为什么会换行TODO 在测试过程中我发现在控制台每九次会加一个brTODO 这是在控制台 如果我让他在body中TODO 因为在HTML中br是换行标签浏览器不会放在内容中…
测试的时候发现一个有意思的地方,就是go始终利用同一块内存来接收集合中的一个值,只是在每次循环的时候重新赋值而已. package main import (     "fmt"     "time" ) func main() {     ii := []int{1, 2, 3, 4, 5}     for idx, i := range ii {         fmt.Printf("[%d]: [%d]@ %p -->%p\n",…
/** * 怎么检测一个变量的类型? * 在js中检测对象类型主要有三种:typeof, instanceof, constructor, 这几种都可以检测对象的类型. * 另外还可以适应jQuery来检测类型. * */ /** * 1.使用typeof检测对象类型 * typeof作为最常用的检测类型方法,返回字符串类型; * */ function testType(value) { var str = typeof(value); switch(str){ case 'undefined…
1.有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量 <script> var sum=0; //一开始的重量设为0: for(i=1;i<=64;i++) { var a=1; //一开始为2的0次方 for(j=0;j<i-1;j++) { a=a*2; } sum=sum+a; } alert(0.00001*sum) 2.羽毛球拍15元,球3元,水2元.200元每种至少一个,有多少可能…
<script language="javascript">     var str = '100';     var num = Number(100);     alert(typeof(num) + ': ' + num);     var obj = Object(str);     alert(typeof(obj) + ': ' + obj);     var bool = Boolean(str);     alert(typeof(bool) + ': ' …
typeof 只能判断基本类型,如number.string.boolean.当遇上引用类型变量就没那么好用了,结果都是object.使用Object.prototype.toString.call(true).slice(8,-1)就能准确的知道变量的类型了.特此备忘.…
先说明一下什么是循环引用对象: var a={"name":"zzz"}; var b={"name":"vvv"}; a.child=b; b.parent=a; 这里的a和b都是一个循环引用对象. 循环引用对象本来没有什么问题,序列化的时候才会发生问题,比如调用JSON.stringify()对该类对象进行序列化,就会报错: Converting circular structure to JSON.    而序列化需求很…
http://www.cnblogs.com/zhus/p/6513741.html  博主写得很好…
变量声明“被提前” JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对“先声明.后使用”的规则很熟悉,如果使用未经声明的变量或函数,在编译阶段就会报错.然而,JavaScript 却能够在变量和函数被声明之前使用它们.下面我们就深入了解一下其中的玄机. 先来看一段代码: (function() { //ReferenceError: noSuchVariable is not defined console.log(noS…
hoist vt.升起,提起; vi.被举起或抬高; n.起重机,升降机; 升起; <俚>推,托,举; 这篇文章不讲英语,但是对于某些英语单词找不到很好的翻译,一上来就列出“hoist”这个单词的释义是为了让大家有个准备,我在这里将此单词翻译为“提前”,是为了解释 JavaScript 语言中很“古怪”的一个特性. 变量声明“被提前” JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对“先声明.后使用”的规则很熟悉,如果…