'Threejs / Raycast doesn't compute intersection with my cube

Here is my js files. It works. When I click on the cube, it goes inside raycast function, but doesn't enter the for loop and console.log( intersects[ 0 ] ) gives undefined

let camera, scene, renderer;
let mesh, mesh_green;
let raycaster, mouse = { x : 0, y : 0 };
init();

function init() {
     camera = new THREE.PerspectiveCamera( 35, window.innerWidth / window.innerHeight, 1, 1000 );
     camera.position.z = 40;
     scene = new THREE.Scene();
     const geometry = new THREE.BoxGeometry( 1, 1, 1 );
     const material = new THREE.MeshBasicMaterial( { color: "red" } );
     mesh = new THREE.Mesh( geometry, material );
     scene.add( mesh );
     mesh.position.set( 0, 10, 0 );
     renderer = new THREE.WebGLRenderer( { antialias: true } );
     renderer.setPixelRatio( window.devicePixelRatio );
     renderer.setSize( window.innerWidth, window.innerHeight );
     document.body.appendChild( renderer.domElement );
     raycaster = new THREE.Raycaster();
     renderer.domElement.addEventListener( 'click', raycast, false );

function raycast ( e ) {
                
    mouse.x = ( e.clientX / window.innerWidth ) * 2 - 1;
    mouse.y = - ( e.clientY / window.innerHeight ) * 2 + 1;
    console.log( "raycast" , e.clientX, mouse.x, window.innerWidth);
    
    raycaster.setFromCamera( mouse, camera );    
    const intersects = raycaster.intersectObjects( scene.children );
    
    for ( let i = 0; i < intersects.length; i++ ) {
        console.log( intersects[ i ] ); 
    }
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source