这个错误是由于在代码中重复声明了'viewport'变量,而且在较高的作用域中已经存在了。这种情况下,JavaScript解释器会优先使用较高作用域中的变量,而不会再创建一个新的变量。
要解决这个错误,可以考虑以下几种方法:
总结起来,解决这个错误的关键是避免重复声明同一个变量,并确保变量在使用之前已经在适当的作用域中声明。
中 , 相同名称 的变量 本作用域的 变量 优先级较高 ; 二、JavaScript 变量 1、全局变量 和 局部变量 JavaScript 变量 根据 其 被声明的 作用域类型 , 分为 全局变量...: 在 全局作用域 声明的变量 , 就是全局变量 , 全局作用域就是 标签中 或者 js 文件中 ; 在 函数外部 声明的变量 ; 特殊情况 : 在 全局作用域中...; 函数形参 : 函数形参 也是 局部变量 ; 特殊情况 : 在 局部作用域中 没有使用 var 声明 , 而直接赋值使用的变量 , 也是 局部变量 ; 2、全局变量 和 局部变量 生命周期...全局作用域中 没有声明 直接使用的变量 也是 全局变量 num2 = 20; console.log("num = " + num); console.log...局部作用域中 没有声明 直接使用的变量 也是 局部变量 num2 = 20; console.log("arg = " + arg);
; 在 ES6 之前 JavaScript 只有 全局作用域 和 局部作用域 概念 , 没有 块级作用域 概念 , 此时 块级作用域 相当于 全局作用域 或 局部作用域 , 具体 取决于 {} 是在哪个作用域中...关键字 声明的 变量 实际上具有 函数作用域 或 全局作用域 ; 如果 if 语句在 函数内部 , 则 在 if 代码块中 使用 var 声明变量 , 具有 函数作用域 ; 如果 if 语句在 全局作用域中...= 全局作用域 在下面的代码中 , 在 {} 代码块中 , 使用 var 关键字声明的变量 , 不具有块级作用域 , 而是具有 函数作用域 或 全局作用域 ; num 是在 if 语句内部声明的 ,...-- 设置 meta 视口标签 --> <meta name="<em>viewport</em>" content="width=device-width, initial-scale=1.0, user-scalable...{} 内部可见 ; 如果在 if 语句外部访问 num2 变量 , 会抛出如下<em>错误</em> : hello.html:19 Uncaught ReferenceError: num2 is not defined
image 在全局作用域中创建的变量都会作为window对象的属性保存,在全局作用域中创建的函数都会作为window对象的方法保存。...在全局作用域中创建的变量和函数可以在页面的任意位置访问,在函数作用域中也可以访问到全局作用域的变量。 尽量不要在全局中创建变量。...当在函数作用域中使用一个变量时,它会先在自身作用域中寻找,如果找到了则直接使用,如果没有找到则到上一级作用域中寻找,如果找到了则使用,找不到则继续向上找;若全局作用域也没有,则报错。...通俗地讲就是先上车后补票,先使用,后声明。 1.变量声明提升 在全局作用域中,使用var关键字声明的变量会在所有的代码执行之前被声明,但是不会赋值。...2.函数声明提升 在全局作用域中,使用函数声明创建的函数(function fun(){}),会在所有的代码执行之前被创建,也就是我们可以在函数声明前去调用函数,但是使用函数表达式(var fun =
中的 var num = 888; 变量 进行 预解析 , 将该 变量 在 局部作用域 中 提升到 最顶端 ; 该提升操作 , 也是只提升变量声明 , 变量 初始化赋值 操作 仍然保留在原地 ;...console.log(num); num = 888; } num = 666; fun(); 在 fun 函数的 局部作用域中...num 变量 , 然后再向上 查找 全局作用域 中的 num 变量 ; 在 fun 函数 的 局部作用域 中 , 找到了 num 变量 , var num; , 但是 该 num 变量 只进行了 声明...的 num2 和 num 进行预解析 , 将 变量 声明 提升到 局部作用域 的顶端 , 将 变量 初始化赋值 留在原地 , 预解析后的结果如下 : var num;...console.log(num1); console.log(num2); console.log(num); 在 fun 函数内部 , 可以打印出 3 个变量的值 888 ; 在 全局作用域中
, 只适用于 var 关键字 , let 和 const 关键字不能使用 ; 这种定义变量的方式已经过时 , 不推荐在现代 JavaScript 代码中使用 , 因为它可能会导致混淆和错误 ; 代码示例...-- 设置 meta 视口标签 --> 展示效果 : 2、只声明变量不赋值 在 JavaScript 中 , 使用 var 关键字 在 函数作用域或全局作用域...中 声明变量 , 使用 let 关键字 在 块级作用域 中 声明变量 , 如果 声明时 , 不进行赋值 , 变量 会被自动初始化为 undefined 值 ; 如果 使用 const 关键字 在 块级作用域...直接使用 , 会报错 console.log(name2); 执行后 , 在控制台中 , 报如下错误
在局部作用域使用变量时,如果在自己作用域找不到对应变量,则会往上一级作用域查找,直到全局作用域,如果全局作用域无此变量则会报 undefined。相反,全局作用域中无法使用局部作用域中的变量。...// 全局作用域,声明了一个全局变量 avar a = 100// 函数会生成局部作用域function acs(){ // 在此局部作用域中声明一个局部变量 b var b = 50 //...-->在全局找到,使用全局作用域中的a // 在此作用域查找变量 b,查找到了,使用此局部变量的 b}()// 输出:b is...红宝书中的描写:闭包是指有权访问另一个函数作用域中的变量的函数。其实闭包就是返回一个函数,且这个函数对局部变量存在引用形成的包含关系就是闭包。其实就是创建一个不会被 GC 回收的局部变量。...在这个例子中利用闭包声明了 5 个新的独立词法作用域。<!
同一个作用域下,对同一个函数的不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值,所以,作用域中变量的值是在执行过程中确定的,而作用域是在函数创建时就确定的。...b,而不是出现错误。...var let 区别 var声明的变量,只有函数才能为它创建新的作用域; let声明的变量,支持块级作用域,花括号就能为它创建新的作用域; 相同作用域,var可以反复声明相同标识符的变量,而let是不允许的...这些闭包是由他们的函数定义和在 testFunc1 作用域中捕获的环境所组成的。这三个闭包在循环中被创建,但他们共享了同一个词法作用域,在这个作用域中存在一个变量i。...箭头函数保持它当前执行上下文的词法作用域不变,而普通函数则不会。换句话说,箭头函数从包含它的词法作用域中继承到了 this 的值。
如果不是的话,它不起作用 (2).content的内容是IE=8,或者IE=edge等值,注意不是IE8或者直接写个edge的值,否则不起作用 3、canonical : 这个标签是 Google、雅虎...可在副本网页的头部(head)加一个link标签,指定首选URL,声明一个权威网页做为复制网页的规范版本,SE将把链接等信息都转移到这个首选版本上,当然搜索结果中也显示权威网页。...*link rel="canonical"属性可以被传递,即A页面声明B为权威链接,B声明C为权威网页,则SE会认为C是A和B共同的首选权威版本。...*此标签只是建议,不是命令,意思是如果设置的不合理,SE仍会按正常的方式确实首选的网页;如权威页指向404页,或指像的页面返回错误,SE仍会索引这个页的内容。...这个name为viewport的meta标签到底有哪些东西呢,又都有什么作用呢?
虽然这已被设计和维护 JavaScript 的委员会 T39 认定是一个错误。但这个bug由来已久,也许永远也不会修复,因为这牵涉到太多的 Web 系统。...已在作用域中声明但还没有赋值的变量,是 undefined。...相反,还没有在作用域中声明过的变量,是 undeclared,而且访问 undeclared 变量,会报 ReferenceError 错误!...隐式强制类型转换 显式强制类型转换的作用是让代码清晰易读 隐式强制类型转换的作用是减少冗余 2.5.1. “+” 操作符 2.5.2. “==” 宽松相等 翻译: 在 == 中 null 和 undefined
JS有两种作用域:全局作用域和函数作用域 内部的作用域能访问外部,反之不行;访问时从内向外依次查找 如果在内部的作用域中访问了外部,则会产生闭包(下面是关于闭包简单介绍,后面将会更新”闭包“相关内容)...内部作用域能访问的外部,取决于函数定义的位置,和调用无关 作用域内定义的变量、函数声明会提升到作用域顶部——预编译;在JS中只有var和function会进行声明提升 示例: js语言 broswer...,执行函数demo时,先将1赋值给b,再将b的值赋值给a;虽然a、b是在函数作用域中,但由于b未经声明,所以下面在browser环境中输出的结果表明b 在 window 属性中,而 a 则不会出现在全局对象中...;函数demo的声明是在全局作用域,所以它归window对象所有 2.四部曲 预编译步骤: 创建 AO 对象(Activation Object,执行上下文) 找形参和变量声明,将变量和形参作为 AO...meta charset="UTF-8" /> <meta name="<em>viewport</em>
| not | only) + 媒体类型 +(and+ 媒体查询){ CSS-Code;}(and+媒体查询),这个是用来限制查询条件的,例如当屏幕小于最大宽度时,@media中的class就起作用了...已在 Media Queries Level 4 中被弃用。device-height输出设备渲染表面(如屏幕)的高度。已在 Media Queries Level 4 中被弃用。...已在 Media Queries Level 4 中被弃用。...orientation视窗(viewport)的旋转方向(横屏还是竖屏模式)。overflow-block输出设备如何处理沿块轴溢出视口(viewport)的内容。...width视窗(viewport)的宽度。
在满足下列条件时,已被声明的变量 v 可出现在:= 声明中: 本次声明与已声明的 v 处于同一作用域中(若 v 已在外层作用域中声明过,则此次声明会创建一个新的变量§), 在初始化中与其类型相应的值才能赋予...v,且在此次声明中至少另有一个变量是新声明的。...值得一提的是,即便Go中的函数形参和返回值在词法上处于大括号之外, 但它们的作用域和该函数体仍然相同。...recover()函数用于终止错误流程处理,一般情况下,recover()应该在一个使用了defer 关键字的函数中执行以有效截取错误处理流程。...panic和recovery用来处理错误。
not | only) + 媒体类型 +(and+ 媒体查询){ CSS-Code; } (and+媒体查询),这个是用来限制查询条件的,例如当屏幕小于最大宽度时,@media中的class就起作用了...已在 Media Queries Level 4 中被弃用。 device-height 输出设备渲染表面(如屏幕)的高度。已在 Media Queries Level 4 中被弃用。...已在 Media Queries Level 4 中被弃用。...orientation 视窗(viewport)的旋转方向(横屏还是竖屏模式)。 overflow-block 输出设备如何处理沿块轴溢出视口(viewport)的内容。...width 视窗(viewport)的宽度。
---- 二、global和nonlocal关键字 当内部作用域想要使用外部作用域的变量时,可使用global和nonlocal关键字。...1.global关键字 在函数内部修改一个定义在函数外的变量时,须使用global关键字明确声明变量。...在函数内部通过global关键字来声明或定义全局变量,可分为两种情况: (1)一个变量已在函数外定义,如果在函数内需要使用该变量的值或修改该变量的值,并将修改结果反映到函数外,可以在函数内用关键字global...明确声明该全局变量。...在这里插入图片描述 2.nonlocal关键字 如果要在一个嵌套的函数中修改嵌套作用域中的变量,则须使用nonlocal关键字。 例:分析以下程序的运行结果。
概述 我们将用几节来学习Go语言基础,本文结构如下: 控制结构 * If -重新声明与再次赋值 * For * Switch -类型选择 控制结构...= nil { log.Print(err) return err } 重新声明与再次赋值 先看个例子: f, err := os.Open(name) if err !...但这种重复仍然是合法的: err 在第一条语句中被声明,但在第二条语句中只是被再次赋值罢了。 也就是说,调用 f.Stat 使用的是前面已经声明的 err,它只是被重新赋值了而已。...在满足下列条件时,已被声明的变量 v 可出现在:= 声明中: 本次声明与已声明的 v 处于同一作用域中(若 v 已在外层作用域中声明过,则此次声明会创建一个新的变量§), 在初始化中与其类型相应的值才能赋予...v,且 在此次声明中至少另有一个变量是新声明的。
innerSay(); //脚本错误 作用域是分层的,内层作用域可以访问外层作用域的变量,反之则不行。...在块语句中定义的变量将保留在它们已经存在的作用域中。...如果一个标识符已经在代码块内部被定义,那么在此代码块内使用同一个标识符进行 let 声明就会导致抛出错误。...因为 let 不能在同一作用域内重复声明一个已有标识符,此处的 let 声明就会抛出错误。但如果在嵌套的作用域内使用 let 声明一个同名的新变量,则不会抛出错误。...自由变量的取值 关于自由变量的值,上文提到要到父作用域中取,其实有时候这种解释会产生歧义。
块级声明意在指定一个块级作用域,使得块级作用域中所定义的变量无法再全局被访问到,块级作用域也被称为词法作用域。...如以下示例: var name = 'eveningwater'; //报错,重复声明 let name = 'loho'; 当然这两个变量必须是在同一个作用域中,如果是不同作用域中,则不会报错。...(name); 同样的const也不能重复声明,如下例: var name = 'eveningwater'; //错误,不能重复声明 const name = 'loho'; 但也可以在不同作用域中重复声明...前面提到let和const声明的变量都不会提升到作用域的顶部,因此在使用这两个标识符声明之前访问会报错,即使是typeof操作符也会触发引用错误。...7.全局作用域绑定 let,const声明与var声明还有一个区别就是三者在全局作用域中的行为。
innerSay(); //脚本错误 作用域是分层的,内层作用域可以访问外层作用域的变量,反之则不行。...在块语句中定义的变量将保留在它们已经存在的作用域中。...如果一个标识符已经在代码块内部被定义,那么在此代码块内使用同一个标识符进行 let 声明就会导致抛出错误。...因为 let 不能在同一作用域内重复声明一个已有标识符,此处的 let 声明就会抛出错误。但如果在嵌套的作用域内使用 let 声明一个同名的新变量,则不会抛出错误。....关于自由变量的取值 关于自由变量的值,上文提到要到父作用域中取,其实有时候这种解释会产生歧义。
领取专属 10元无门槛券
手把手带您无忧上云