var b = 10; (function b() { b = 20; console.log(b); })(); console.log(b); 结果是什么
时间: 2024-04-26 12:21:04 浏览: 36
执行这段代码后,控制台会输出 `function b() { b = 20; console.log(b); }`,然后输出 `10`。
这是因为这段代码中存在函数名称和变量名称相同的情况,也就是函数名和变量名重复了。在这种情况下,函数名会覆盖变量名,即函数名会被视为变量名的一个副本,使得外部的变量 `b` 在函数内部变得不可访问。因此,在函数内部对 `b` 进行赋值操作 `b = 20` 并不会改变外部的变量 `b` 的值,而是在函数内部声明了一个名为 `b` 的变量,使得 `b` 的值为 `20`。
因此,在函数内部执行 `console.log(b)` 时,输出的是 `20`。而在函数外部执行 `console.log(b)` 时,输出的是外部的变量 `b` 的值,即 `10`。
相关问题
var box = document.querySelector('.box') var box1 = document.querySelector('.box1') box.onmousedown = function (e) { var e = e || window.event var e = event.offsetX var d = event.offsetY console.log(e) console.log(d) } box1.onmousemove = function (e) { var e = e || window.event var x =event.offsetX var y =event.offsetY console.log(x) console.log(y) box.style.left = x + 'px' box.style.top = y + 'px' } box1.onmouseup = function () { console.log('我要取消了移动事件') box1.onmousemove = null } 这段代码的错误
这段代码的错误在于以下几点:
1. 在 box.onmousedown 事件处理函数中,将 event 对象的 offsetX 属性赋值给了变量 e,导致后面的代码中 e 的值被覆盖,无法得到正确的鼠标点击位置。
2. 在 box1.onmousemove 事件处理函数中,获取鼠标移动位置时,将 event 对象的 offsetX 和 offsetY 属性分别赋值给了变量 x 和 y,但是变量 x 和 y 在后面的代码中没有被使用,导致无法实现 box 的移动。
3. 在 box1.onmouseup 事件处理函数中,尝试取消 box1.onmousemove 事件处理函数,但是这样是无法生效的,因为 box1.onmousemove 赋值为 null 并不会取消事件处理函数。
正确的代码应该是:
```javascript
var box = document.querySelector('.box');
var box1 = document.querySelector('.box1');
var offsetX, offsetY;
box.onmousedown = function (e) {
var e = e || window.event;
offsetX = e.offsetX;
offsetY = e.offsetY;
console.log(offsetX);
console.log(offsetY);
}
box1.onmousemove = function (e) {
var e = e || window.event;
var x = e.clientX - offsetX;
var y = e.clientY - offsetY;
console.log(x);
console.log(y);
box.style.left = x + 'px';
box.style.top = y + 'px';
}
box1.onmouseup = function () {
console.log('我要取消了移动事件');
box1.onmousemove = null;
}
```
在上述代码中,我们将鼠标点击位置的 offsetX 和 offsetY 值保存在变量中,在 box1.onmousemove 事件处理函数中,根据鼠标移动的位置计算出 box 的新位置,并将其赋值给 box 的 style.left 和 style.top 属性,实现了盒子的移动。在 box1.onmouseup 事件处理函数中,我们将 box1.onmousemove 赋值为 null,实现了取消 box1.onmousemove 事件处理函数的效果。
function fun(){ var a = b =5 } fun() console.log(a,typeof a) console.log(b,typeof b)
这段代码中,变量 a 是在函数内部声明的局部变量,而变量 b 是在函数内部未使用 var 或 let 声明的全局变量。因此,变量 b 的作用域是整个全局作用域,而变量 a 的作用域仅限于函数内部。
在调用函数 fun() 后,变量 a 的值为 5,但是在函数外部无法访问变量 a,因为它是局部变量。而变量 b 的值同样为 5,且在函数外部也可以访问到变量 b,因为它是全局变量。
因此,console.log(a,typeof a) 的输出会是 undefined 和 undefined,因为变量 a 在函数外部是未定义的,它只存在于函数内部。而 console.log(b,typeof b) 的输出会是 5 和 number,因为变量 b 是全局变量,可以在函数外部访问到。
相关推荐
![png](https://img-home.csdnimg.cn/images/20210720083516.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)