关于作用域的问题?

<script src=’jquery-3.1.0.min.js’></script>
<script type=”text/javascript“>
var mycanvas=document.getElementById(“mycanvas”);
var mycvs=mycanvas.getContext(“2d”);
mycvs.width=window.innerWidth;
mycvs.height=window.innerHeight;
var originX=400;
var originY=800;
$(window).mousedown(function(e){

var positionX=e.offsetX;
var positionY=e.offsetY;
paint();

})

function paint(){

mycvs.beginPath();
mycvs.lineWidth=1;
mycvs.strokeStyle="black";
mycvs.moveTo(originX,originY);
mycvs.lineTo(positionX,positionY);
mycvs.storke();

}

positionX为什么是为定义?关于paint()这个函数是不是在鼠标点击事件调用它之前,计算机也会读取代码中的内容?

老兄,你的

var positionX=e.offsetX;
var positionY=e.offsetY;

都是局部变量,你在下面使用,当然不能用呀。
把var positionX和var positionY移动到外面声明

var positionX,positionY;
$(window).mousedown(function(e){

positionX=e.offsetX;
positionY=e.offsetY;
paint();
})

或者把positionX和positionY以参数的形式传入paint(),如

$(window).mousedown(function(e){

var positionX=e.offsetX;
var positionY=e.offsetY;
paint( positionX, positionY );
})
function paint( px, py ){

mycvs.beginPath();
mycvs.lineWidth=1;
mycvs.strokeStyle="black";
mycvs.moveTo(originX,originY);
mycvs.lineTo( px, py );
mycvs.storke();
}

你的代码我复制下来没有报错,第二个问题是函数声明的提升问题,具体可以参考 mdn 的文章

  1. https://developer.mozilla.org

  2. https://developer.mozilla.org

因为函数作用域啊,你在回调函数里面声明的变量,只在函数体内有效,在外面访问不到。可以作为参数传递。

因为你的$(window).mousedown(function(e){

var positionX=e.offsetX;
var positionY=e.offsetY;
paint();

})中定义的 positionX是局部变量;下面的函数访问不到;方案吗就是传参;或者变量定义在外部;
function paint(){

mycvs.beginPath();
mycvs.lineWidth=1;
mycvs.strokeStyle=”black”;
mycvs.moveTo(originX,originY);
mycvs.lineTo(positionX,positionY);
mycvs.storke();

}

  • 有没可以提供Javascript日志采集的在线服务?
  • 反斜线转义和html转义区别?
  • 如果网页上的文字既是标题h1又是一个链接a,是h1包含a还是a包含h1?
  • 唉,做个html5页面,这小部分怎么做呢?
  • 添加多条数据组织为一个对象并传给php,php如何接收参数并解析为正常数据并插入到表中?
  • 关于《javascript语言精粹》中P38闭包:改变Body颜色的例子没有在浏览器生效
  • IE8下jquery无法设置textarea的值
  • 前端如何解决延迟渲染
  • html5audio
  • canvas问题
  • 用angularjs在本地没有问题,放到公司的测试服务器上突然就报出一个错误